Назад | Перейти на главную страницу

Cron может выполняться каждые 45 дней? (примерно 1,5 месяца)

Прочитав документацию по crontab, я не могу придумать, как записать следующий график: выполнять скрипт ровно один раз каждые 45 дней.

Кто-нибудь знает об элегантном решении? Спасибо.

Поскольку период в 45 дней плохо делится на недели, месяцы или годы по григорианскому календарю, невозможно ограничить, по каким датам запускается ваш сценарий, и при этом он будет выполняться во все дни, которые вы хотите.

Из-за этого вам нужно будет запускать свою команду каждый божий день, а сама команда должна возвращаться без каких-либо действий в 44 из 45 дней.

Например, если вы хотите, чтобы сценарий запускался в 03:17, команда могла бы выглядеть так:

17 3 * * * /usr/local/bin/your-script

А внутри скрипта вы можете сделать это:

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

В != 0 part может использовать другое число в зависимости от того, в какой день вы хотите запустить его в первый раз. И вы можете поместить эту дополнительную логику в crontab, а не в скрипт, хотя я лично считаю, что это более читабельно делать в скрипте.

Обратите внимание, что если в вашем часовом поясе используется летнее время, вам может потребоваться настроить указанное выше, чтобы избежать смещения расписания на день при настройке часов. Точные детали зависят от того, какой часовой пояс и какое время дня вы выбираете для запуска сценария.

Возможно, вам потребуется использовать две записи cronjob: первая - на месяц, вторая - на 45 дней.

для каждого месяца использовать ниже cron

0 0 1 * *  your_script

и 45 дней эта запись в cron

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

Я получил ссылку по ссылке ниже на 45 дней cron schedular

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days