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

Символ L в выражении Cron для «Последний день месяца»

В настоящее время я пишу статью о cron, предназначенную для людей, которые знакомы с инструментом, но не обязательно используют его часто. Я хочу, чтобы примеры были совместимы с наиболее распространенными рабочими столами Unix (Linux после 2002, bsd, osx).

При поиске выражения cron для «последнего дня месяца» большинство рекомендаций, которые я нашел, предлагают использовать комбинацию выражения cron, которое будет выполняться с 28 по 31 число каждого месяца, в сочетании с командой, которая включает логическое значение даты сравнение.

TODAY=`date +%m` # Computes the month for today (01-12)
TOMORROW=`date --date=tomorrow +%m` # Computes the month for tomorrow (01-12)
0 0 28-31 * * [$TODAY -lt $TOMORROW] && command

Кажется, это популярный трюк Unix. Я недавно наткнулся на это статья в Википедии в Cron Expressions, в котором обсуждаются некоторые символы, о которых я не встречал больше нигде, даже на страницах руководства. Согласно статье, символ L можно использовать в выражении, чтобы указать последний день месяца (или недели).

Какая версия cron поддерживает это? насколько широко это поддерживается? почему об этом так мало известно?

Я никогда не слышал об этом L construct, это определенно не стандарт, о котором я знаю (определенно не в Vixie cron, согласно справочной странице и некоторым эмпирическим тестам).

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

Я не знаю о синтаксисе L, но в BSD вы можете использовать:

       string     meaning
       ------     -------
       @reboot    Run once, at cron(8) startup.
       @yearly    Run every January 1, "0 0 1 1 *".
       @annually  (same as @yearly).
       @monthly   Run the first day of every month, "0 0 1 * *".
       @weekly    Run every Sunday, "0 0 * * 0".
       @daily     Run every midnight, "0 0 * * *".
       @midnight  (same as @daily).
       @hourly    Run every hour, on the hour, "0 * * * *".

Но это тоже не стандарт ...