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

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

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

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

решение1

Поскольку период в 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может использовать другой номер в зависимости от того, в какой день вы хотите, чтобы она запустилась в первый раз. И вы можете выбрать, чтобы поместить эту дополнительную логику в crontab, а не в скрипт, хотя лично я нахожу более читабельным сделать это в скрипте.

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

решение2

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

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

0 0 1 * *  your_script

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

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

Я получил ссылку ниже на 45-дневный график cron

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

Связанный контент