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

Используя cron и скрипт, как я могу заставить что-то срабатывать, например, в 10 утра, за 11 дней до последнего вторника каждого месяца?

Я хочу запланировать запуск задачи за несколько секунд, минут, часов, дней или недель до указанного дня недели в конкретном месяце. Примеры:

Мне удобно настраивать cron / at для выполнения заданий в определенные дни, и я понимаю, что если я хочу работать по такого рода расписаниям, мне, вероятно, придется запускать скрипт вместе с cron.

Есть ли у кого-нибудь примеры того, как я могу это сделать?

Для вашего первого примера, с 8 утра за 7 дней до последнего вторника месяца, я бы сделал следующее:

0 8 * * 2 [[ $(date +%m) -eq $(date -d +7days +%m) ]] && [[ $(date +%m) -ne $(date -d +14days +%m) ]] && myscript

Это запускается в 8 утра каждый вторник (0 8 * * 2), а затем скажите «если месяц через 7 дней будет таким же, как этот месяц» (т. е. это не тот последний Вторник месяца) и "если месяц через 14 дней не то же, что и в этом месяце "(т.е. это второй-последний вторник месяца), затем запустите myscript.

Технически это может быть более эффективным - например, вы знать что второй-последний вторник месяца не может быть 1-м числом - но это только усложняет понимание. :) Кроме того, в зависимости от того, в какой именно оболочке cron запускается и т. Д., Могут потребоваться некоторые кавычки (+%m может потребоваться "+%m"), или вам может потребоваться избежать знака процента (т.е. +%m может потребоваться +\%m).

Обобщение этого трюка на другие дни и предварительные комбинации оставлено в качестве упражнения для читателя.