Док говорит, что cron.monthly будет запланирован в соответствии с первым временем выполнения и сравнивает /var/spool/cron/lastrun/cron.monthly с текущим временем запуска. Вопрос в том, будет ли он работать в соответствии с директивой DAILY_TIME в файле /etc /sysconfig /cron или в /var/spool/cron/lastrun/cron.monthly time. Если это следует /var/spool/cron/lastrun/cron.monthly я должен коснуться файла, когда я хочу планировать работу ???

1 ответ1

0

Когда cron запускает ежемесячные cronjobs?

cron запускает ежемесячные cronjobs один раз в месяц во время изменения /var/spool/cron/lastrun/cron.monthly (или, точнее, где-то в пределах 15-минутного диапазона после этого времени).

Вы можете видеть это в /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=""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .