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

我正在写一篇关于cron的文章,目的是熟悉这个工具的人,但不一定经常使用它。 我希望这些例子能够与大多数常用的Unix桌面(post 2002 linux,bsd,osx)兼容。

在寻找“每月的最后一天”的cronexpression式时,我发现的大多数build议都build议使用将从每月的28到31运行的cronexpression式的组合,并将其与包含布尔date比较。

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 

这似乎是一个stream行的Unix技巧。 我最近偶然发现了关于Cronexpression式的这个维基百科文章 ,讨论了我在其他地方没有提到过的一些字符,甚至没有提到手册页。 根据文章,L字符可以在expression式中用来指定月份(或周)的最后一天。

哪个版本的cron支持这个? 它受到多大程度的支持? 为什么这么less知道?

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

但是这也不是标准…

我从来没有听说过这个L构造,这当然不是我知道的标准(根据man page和一些实证testing,绝对不是Vixie cron的标准)。

除了那个唯一的维基百科的机器外,我不会指望它工作,而且我build议使用你在问题中描述的方法,这个方法几乎可以在任何地方工作。