doc 说 cron.monthly 将根据第一次运行时间进行安排,并将 /var/spool/cron/lastrun/cron.monthly 与当前运行时间进行比较。问题是它将根据 /etc/sysconfig/cron 文件中的 DAILY_TIME 指令运行还是根据 /var/spool/cron/lastrun/cron.monthly 时间运行。如果它遵循 /var/spool/cron/lastrun/cron.monthly,当我想要安排作业时,我是否必须触摸该文件???
答案1
cron 何时运行每月的 cronjobs?
cron
/var/spool/cron/lastrun/cron.monthly
每月在 的修改时间(或者更准确地说,在该时间之后的 15 分钟范围内的某个时间)启动一次每月的 cronjobs 。
您可以在中看到/usr/lib/cron/run-crons
,它已启动每 15 分钟在/etc/crontab
:
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
处理每月的 cronjobs 时/usr/lib/cron/run-crons
:
检查是否
cron.monthly
超过/var/spool/cron/lastrun/
一个月。如果不是,则跳过每月的 cronjobs。
否则,删除锁文件:
eval find $SPOOL/$BASE $TIME | \ xargs --no-run-if-empty rm
将每月的 cronjob 添加到运行列表中:
if test ! -e $SPOOL/$BASE ; then # accept this dir, if it isn't empty LIST=`find $CRONDIR ! -type d` if [ ! -z "$LIST" ] ; then RUN="${RUN} ${TIME_EXT}" fi fi
并运行作业。
我如何安排每月的 cronjobs?
如果您希望每月的 cronjobs 立即运行(即在接下来的 15 分钟内),请删除
/var/spool/cron/lastrun/cron.monthly
。如果你希望每月的 cronjobs 从今天凌晨 3 点开始运行,请执行以下操作:
$ touch -d "$(date -d "3am last month")" /var/spool/cron/lastrun/cron.monthly
根据您的需要修改上述命令。
变量DAILY_TIME
该DAILY_TIME
变量仅适用于日常 cron 作业,如在中所见/usr/lib/cron/run-crons
和所记录的/etc/sysconfig/cron
:
# At which time cron.daily should start. (...)
DAILY_TIME=""