Linux 定时任务管理

这篇笔记主要记录一些常见的Linux定时任务

一、定期任务

crontab

最小粒度,1分钟

守护进程 crond

每分钟扫描一次下列文件
    /var/spool/cron/*  命令生成
    /etc/crontab       文本文件
    /etc/cron.d/*      自定义的定时任务

任务格式:分 时 日 月 周

编辑方式

    1、crontab 命令
    2、/etc/crontab 文件
    3、/etc/cron.d/* 文件

限制文件

    /etc/cron.allow  在文件中的可以使用crontab

    /etc/cron.deny   不在文件中的用户可以使用crontab (默认存在空文件)

    /etc/security/access.conf

运行方式

    1、crontab创建工作

    2、系统会将工作以文本格式写入 /var/spool/cron/

    3、创建用户名的定时文件

    4、等待crond执行,观察日志输出

输出日志

/var/log/cron

配置方式

1、命令配置 常用
设置:crontab [-u username] [-l|-e|-r]
    -u 指定用户,不添加就是当前用户
    -l 列出crontab列表,默认当前用户
    -e 编辑crontab
    -r 移除所有的定时任务,建议编辑处理
内容格式:
    0 12 * * * mail -s "at 12:00" test_user < /home/test_user/.bashrc
    分 时 日 月 周 |<==============指令串========================>|
    特殊字符:
        * 任意时刻
            * 任意时刻
        , 多个值 
            0 3,6 * * * command 每天3点整和6点整都执行
        - 一段时间
            20 8-12 * * * command 每天8:20-12:20 ,执行4次
        / 每隔多久
            */5 * * * * command 每隔5分钟执行一次
案例:
    crontab -e
    进入vi界面,输入i,写入如下内容,按esc,输入q退出
    0 12 * * * mail -s "at 12:00" test_user < /home/test_user/.bashrc
2、编辑/etc/crontab 较少用

注意:编辑/etc/crontab可能是写入到内存的,需要重启crond服务才会生效

编辑内容:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
0 12 * * * root echo `date` > /tmp/abc 

重启crond服务

3、编辑其他目录 一般不用

注意:放在下列目录下的文件必须是可执行文件!

/etc/cron.d/      

/etc/cron.daily/  

/etc/cron.hourly/  

/etc/cron.monthly/

/etc/cron.weekly/

注意事项

    1、日月和周不能同时存在

    2、编辑/etc/crontab可以指定谁接受结果邮件

    3、crond日志在/var/log/cron

    4、用户密码过期,定时任务将会执行失败

    5、定时任务如果有大量输出,需要将结果重定向,可能会出现sendmail的僵尸进程


anacron

用于检测系统未进行的crond任务,没仔细研究过

实现原理

crontd每小时执行一次 anacron 程序,anacron 会读取时间戳,对比上次记录的 anacron 执行时间,如果时间有差异,代表存在未执行的任务,然后会执行未执行的任务

配置文件

放置在/etc/cron.hourly/0anacron

执行流程

  1. 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天
  2. 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳
  3. 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令
  4. 若准备进行指令,根据 /etc/anacrontab 的设定,将延迟 5 分钟 + 3 小时,看 START_HOURS_RANGE 的设定
  5. 延迟时间过后,开始执行后续指令,即 run-parts /etc/cron.daily 这串指令
  6. 执行完毕后, anacron 程序结束

这个是个开机自启的程序,会影响开机速度,如果长时间关机,在开机机后一个小时CPU会忙碌,因为anacron会执行未执行的定时任务


二、定时任务

at

可以在指定时间执行,不过平时用的少,一般crond就能满足绝大多数的需求了

守护进程 atd

运行方式

  1.  at 指令产生要运行的工作
  2.  将工作以文本格式写入/var/spool/at/ 目录内
  3. 等待atd服务执行

限制文件

  • /etc/at.allow 只有在文件中的用户可以使用at
  • /etc/at.deny  不在文件中的用户可以使用at  (默认存在空文件)
  • 都没有,就只有root能执行at
  • 上述情况一般不会同时存在

使用方式

1、设置
at [-mldv] Time
    -m 结束后以邮件方式通知
    -l 等价于atq,列出当前系统上该用户的at列表
    -d 等价于atrm,取消一个at列表中的工作
    -v 列出at列表,显示较详细
    -c 列出某个工作的实例指定内容

时间格式:
    HH:MM   04:00   今天的4点执行,如果已经过了,就明天4点执行
    HH:MM YYYY-MM-DD 04:00 2015-07-30  指定某一时刻执行
    HH:MM[am|pm] [Month] [Date]  04pm July 30  指定某一时刻执行
    H:MM[am|pm] + number [minutes|hours|days|weeks] 
        now + 5 minutes  五分钟后执行
        04pm + 3 days    三天后的下午四点执行
    注意:单位后面要带s,命令最好使用绝对路径 *

2、查看

at -c 工作号码
at -l 任务清单
3、工作目录

at 会将下达命令的目录作为工作目录,所以命令和文件都要写绝对路径,以防万一

4、输出结果

at 的执行与终端机环境无关,所有输出结果发送到mailbox

如果执行的命令没有输出,就不会发送邮件,可以使用-m强制发送邮件

5、案例
编辑:
    at now + 5 minutes
    at> /bin/mail -s "testing at job" root < /root/.bashrc
    at> /bin/sync
    at>   按Ctrl+d 结束输入
    job 1 at Fri Oct 27 00:26:00 2023
查看:
    at -c 2 查看工作内容
    atq 查看工作列表
取消:
    at -d 2
    或者
    atrm 2
6、其他
man at
NAME
       at, batch, atq, atrm - 排队、检查或删除以后要执行的作业。

总览
       at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]  atq [-V] [-q 队列] [-v]
       atrm [-V] 作业 [作业...]
       batch [-V] [-q 队列] [-f 文件] [-mv] [时间]

描述
       at 和 batch 从标准输入或一个指定的文件读取命令,这些命令在以后某个时间用 /bin/sh 执行。

       at      在指定的时间执行命令。

       atq     列出用户的等待执行的作业;在用户是超级用户的情况下,列出所有人的作业。

       atrm    删除作业。

       batch   在系统负载水平允许的时候执行命令;换句话说,当平均负载降到低于0.8,或降到了在  atrun  文件中指定的期望值时运行。  译注:atrun
               文件参见 atd 手册页。

三、空闲时任务

batch

用来在系统空闲时执行的任务,平时基本没在用,没怎么了解太深

工作时间

在CPU负载低于0.8时,进行下达的命令

使用方式

batch
at>/usr/bin/updatedb
at>    # ctrl+d
job 2 at Fri Oct 27 00:30:00 2023

管理软件

通过使用可以看出与at的管理方式相同,atq,atrm管理

你可能感兴趣的:(知识系列,#,知识系列,Linux-基础知识,linux,运维,笔记)