这是 crontab 格式:
* * * * *
| | | | |
| | | | +---- Day of the Week (range: 0-6, 0 standing for Sunday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
Ubuntu man 5 crontab
says:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
所以,这应该适合你:
0 0 2-31 * 0 /home/ubuntu/x.h
0 0 2-31 * 1-6 /home/ubuntu/y.h
我不确定为什么 7 会在星期六运行 - 您的系统时间准确且位于正确的时区吗?
Edit:啊,是的,遗憾的是您无法同时指定星期几和月份。从man 5 crontab
:
注意:命令执行的日期可以由两个字段指定 - 月份中的某一天和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时将运行该命令。例如,“30 4 1,15 * 5”将导致命令在每月 1 日和 15 日以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来实现所需的结果(请参阅下面的 CRON 文件示例中的最后一个示例)。
所以,答案是:
0 0 2-31 * * test $(date +\%u) -eq 7 && /home/ubuntu/x.h
0 0 2-31 * * test $(date +\%u) -ne 7 && /home/ubuntu/y.h
$(date '+%u')
返回 1-7 代表周一到周日。尝试echo $(date '+%u')
举个例子。