cron.monthly 作业在 SLES 中什么时间运行?

cron.monthly 作业在 SLES 中什么时间运行?

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

  1. 检查是否cron.monthly超过/var/spool/cron/lastrun/一个月。

  2. 如果不是,则跳过每月的 cronjobs。

  3. 否则,删除锁文件:

    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=""

相关内容