![/etc/cron.hourly 和 /etc/cron.daily 等中的脚本会自动执行吗?](https://linux22.com/image/156789/%2Fetc%2Fcron.hourly%20%E5%92%8C%20%2Fetc%2Fcron.daily%20%E7%AD%89%E4%B8%AD%E7%9A%84%E8%84%9A%E6%9C%AC%E4%BC%9A%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E5%90%97%EF%BC%9F.png)
我知道 中的条目/etc/cron.d/
是自动执行的。但我也发现了这些/etc/
/etc/cron.daily/
/etc/cron.hourly/
/etc/cron.monthly/
/etc/cron.weekly/
在/etc/cron.d/
我发现0hourly
其中有这样的内容:
01 * * * * root run-parts /etc/cron.hourly
没有名为*daily
、*monthly
或 的文件*weekly
。
这是否意味着如果我在其中添加脚本/etc/cron.hourly
将自动执行?对于/etc/cron.daily
,/etc/cron.monthly/
和中的脚本不会发生这种情况/etc/cron.weekly/
?
编辑:
/etc/crontab
除了初始化变量SHELL
、PATH
和 之外MAILTO
,My是空的。
在/etc/cron.hourly/
我找到的脚本0anacron
似乎检查cron.daily
今天是否已运行。我还发现/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
# 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
我想这给了我一些阅读的机会。特别是anacron(8)
和anacrontab(5)
.
答案1
CentOS 在这方面看起来和 Ubuntu 很像,只是配置略有不同。 Ubuntu 使用 anacron 来运行每日/每周/每月作业,它们在/etc/crontab
和中配置/etc/anacrontab
。
对于 CentOS,首先我们有:
# cat /etc/cron.hourly/0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
每天检查/运行 anacron 一次,然后:
# 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
其中配置了每日、每周和每月的 crontab。