linux 例行性工作调度
- 工作调度种类:at,cron
- 例行性的,每隔一定周期来执行的计划,像每月的会员活动
- 突发性的,执行一次
- at:执行一次就结束调度的指令,需要atd服务支持才可以
- crontab:crontab指令设置的工作可以永远循环执行下去,循环时间:分、时、日、月、周等,需要cron服务可以生效
- 仅一次的工作调度 at
- 启动 /etc/init.d/atd start
- 运行方式:根据/etc/at.allow 与 /etc/at.deny配置增加使用限制
- 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
- 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
- 如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。
- 配置运行单一工作调度
- at -h 查看at支持的命令格式
- atq 列出at工作调度列表
- atq jobnumber 将第几个工作调度移除
- batch 系统空余时间执行,可在 CPU 工作负载小于 0.8 时才进行后续的工作调度
- at的工作特点:支持脱机工作
- 循环执行的例行性工作调度
- 使用设置:
- /etc/cron.allow: 将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
- /etc/cron.deny: 将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。
- 配置任务文件:
- /etc/crontab
- /etc/init.d/*
- /var/spool/cron/用户名
- crontab -e
- 命令说明:
- crontab -l 列出所有的执行任务
- crontab -r (慎操作),删除所有的执行任务
- crontab -e 编辑执行的任务
- * * * * * base home/aa.sh
- 使用设置:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 指令 |
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7(周的数字为 0 或 7 时为星期天) | 执行指令 |
特殊字符 | 代表意义 |
*(星号) | 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表着“不论何月、何日的礼拜几的 12:00 都执行后续指令”的意思! |
,(逗号) | 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是: |
-(减号) | 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作: |
/n(斜线) | 那个 n 代表数字,亦即是“每隔 n 单位间隔”的意思,例如每五分钟进行一次,则: |
- cron最低检测限度:分
- 修改/etc/crontab配置文件格式:/etc/crontab 设置分为七栏,“分、时、日、月、周、执行者、指令”为其设置依据
- 注意事项:周与日月不可同时并行
- 30 12 11 9 5 root echo "just test"
- 错误认为是:9月11号为星期五可以执行
- 命令说明:可以每周五执行,也可每年的9月11号执行
4. 可唤醒停机期间的工作日任务:anacron
- 使用场景:执行的任务正好是在停机期间,定时任务执行无法执行
- anacron每个小时被crond执行一次,去检测相关调度任务是否被执行,如果有超时的工作调度,就执行该调度任务,执行完毕或无调度任务时,就停止。
- anacron是一支程序,不是服务
- anacron配置目录只有/etc/anacron:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45 (执行任务前延迟随机的时间在执行,时间范围是0~45)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22(指定了运行时间段)
#下面是执行计划
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
period in days
轮回天数,表示任务多少天执行一次。
delay in minutes
表示启动Anacron和运行作业时间之间的延迟,单位为分钟. 当然前提是自最后一次运行之后所经过的时间超出了轮回天数。 但是它并不是作业真正运行的时间,真正运行的时间还需要加上RANDOME_DELAY中设置的随机分钟数。
job-identifier
作业的标识符。anacron在执行任务时会将日期写入/var/spool/anacron/$job-identifier文件中
command
实际运行的命令。这里的 run-parts 是一个运行指定目录中所有程序与脚本的命令,可以通过 man run-parts 来查看它的说明
anacron 配合 /etc/anacrontab 的设置,可以唤醒停机期间系统未进行的 crontab 任务
5.小结:crontab 和at 都是定时去执行任务,时间过了就不执行了,anacron是“定期”去执行某一段周期的任务