本文介绍cron和anacron定时任务,并介绍如何在Linux上设置anacron。
在 Linux 中设置 Anacron
Anacron
是以周期定义的频率定期运行命令。 它与cron的区别如下:
- 假设你有一个计划的任务(如备份脚本 ),每半年可以使用cron运行,可能当你睡着了,你的桌面/笔记本电脑在那个时候关闭了。 您的备份脚本将不会被执行。
- 但是,如果您使用anacron,您可以放心,下次再次启动桌面/笔记本电脑时,将执行备份脚本。
Anacron 在 Linux 中的工作原理
anacron
作业列在 /etc/anacrontab
中 ,作业可以使用以下格式进行安排(anacrontab
文件中的注释必须以#开头)。
[root@xiexianbin_cn ~]# cat /etc/anacrontab
# /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
# 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
[root@xiexianbin_cn ~]#
说明如下:
- period in days(期间) - 这是以天为单位指定的工作执行频率,或者每天,每周或每月@daily,@周,或@monthly一次。 您也可以使用数字:1 - 每天,7 - 每周,30 - 月和N - 天。
- delay in minutes(延迟) - 这是在执行作业之前等待的分钟数。
- job-identifier - 这是在日志文件中编写的作业的独特名称。
- command(命令) - 这是要执行的命令或shell脚本。
要查看示例文件,请键入:
[root@xiexianbin_cn ~]# ll -lh /var/spool/anacron/
total 12K
-rw-------. 1 root root 9 May 6 03:49 cron.daily
-rw-------. 1 root root 9 Apr 26 03:20 cron.monthly
-rw-------. 1 root root 9 May 1 03:50 cron.weekly
[root@xiexianbin_cn ~]#
这实际上是这样的:
Anacron将检查在期间字段内的指定期间内是否已经执行作业。 如果没有,则在等待延迟字段中指定的分钟数后,执行命令字段中指定的命令。
作业执行完成后,它将使用job-identifier(timestamp文件名)字段中指定的名称将日期记录在/var/spool/anacron
目录中的时间戳记文件中。
例子
每天运行/home/aaronkilik/bin/backup.sh
脚本:
@daily 10 example.daily /bin/bash /home/aaronkilik/bin/backup.sh
如果在预期运行backup.sh作业时机器关闭,anacron将在机器上电后10分钟运行,而无需再等待7天。
您应该了解的anacrontab文件中有两个重要的变量:
- START_HOURS_RANGE - 这将设置作业启动的时间范围(即在以后几个小时内执行作业)。
- RANDOM_DELAY - 这定义了添加到用户定义的作业延迟的最大随机延迟(默认为45)。
Anacron - /etc/anacrontab文件
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
@daily 10 example.daily /bin/bash /home/aaronkilik/bin/backup.sh
以下是cron和anacron的比较 ,以帮助您了解何时使用它们。
cron | anacron |
---|
守护进程 | 非守护进程 |
适用于服务器机器 | 适用于台式机/笔记本电脑 |
能够每分钟运行排定的作业 | 只允许您每天运行排定的作业 |
当机器关闭时,不执行计划作业 | 如果机器在计划作业到期时关闭,则在下次启动机器时将执行计划作业 |
可以由普通用户和root使用 | 除非另有说明,否则只能由root使用(对具有特定配置的普通用户启用) |