Cron 表达式中的 L 字符表示“本月最后一天”

Cron 表达式中的 L 字符表示“本月最后一天”

我目前正在写一篇关于 cron 的文章,针对那些熟悉该工具但不一定经常使用它的人。我希望这些示例与目前使用的大多数常见 Unix 桌面兼容(2002 年后的 linux、bsd、osx)。

在寻找“每月最后一天”的 cron 表达式时,我发现的大多数建议都建议使用从每月 28 日到 31 日运行的 cron 表达式与包含布尔日期比较的命令的组合。

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 支持此功能?它受到多广泛的支持?为什么它如此鲜为人知?

答案1

我不知道 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 * * * *".

但这也不是标准...

答案2

我从未听说过这种L构造,它肯定不是我所知道的标准(根据手册页和一些经验测试,它肯定不在 Vixie cron 中)。

我不会指望它除了在那台孤独的维基百科机器上之外还能工作,我建议使用你在问题中描述的方法,它几乎在任何地方都有效。

相关内容