我试着:
- 每月第一天运行作业 A:0 0 1 * *
- 在该月的其他几天运行作业 B:0 0 2-31 * ?
Ubuntu 14.02 LTS 上的 Vixie cron 拒绝第二种语法,尽管根据Wikipedia和官方规范它似乎是有效的:
“crontab”,The Open Group Base Specifications Issue 7 — IEEE Std 1003.1,2013 版,The Open Group,2013,2015 年 5 月 18 日检索
根据上面的参考资料,该语法0 0 2-31 * *
将在每月的每一天运行该作业,因为第三个和第五个字段被视为运行条件的 OR 子句。
您应该使用 a
*
,而不是 a?
(这是无效的)。Wikipedia 页面指出,这
?
是仅由 nnCron 使用的非标准扩展,您没有使用它。在任何情况下,如果将星期几设置为
*
并指定了月份中的某天,那么星期几将被忽略。您引用的 IEEE 1003.1 规范实际上说明了这一点,解释了这些字段如何交互:所以正确的格式是合乎逻辑的:
您可以使用日期:
如果您的 crond 不允许您指定不同的日期,请在您的脚本周围包裹一个小的 shell 脚本。
每天运行脚本,让它决定运行哪个脚本。