cronjobs:运行 每天 "except" 当 weekly/monthly/yearly 是 运行
cronjobs: Run every day "except" when weekly/monthly/yearly is running
我目前总是 运行 6 点。曾经.
0 6 * * 1-6 server.sh backup daily # Run Monday-Saturday
0 6 * * 0 server.sh backup weekly # Run every Sunday
而且由于时间的流逝,它们有时会发生碰撞:
0 6 1 2-12 * server.sh backup monthly # Run 1st day of month (feb-dec)
0 6 1 1 * server.sh backup yearly # Run 1st of January
我之前已经改变了 weekly/monthly/yearly 的时间,这样他们就不会同时 运行。
我希望 cronjob 有一种简单的方法可以每天 6 点 运行 并每天整理/weekly/monthly/yearly
年应该出现在月、周和日、月出现在周和日之上。
对于每日和每周作业,您可以检查该月的第几天是否为 1
,如果不是则仅 运行:
0 6 * * 1-6 [ "$(date '+%%-d')" -ne 1 ] && server.sh backup daily # Run Monday-Saturday
0 6 * * 0 [ "$(date '+%%-d')" -ne 1 ] && server.sh backup weekly # Run every Sunday
格式化指令 +%%-d
是 "day of month, without zero padding"。
%%
必须加倍,否则 cron 会将其解释为换行符。
某些版本的 date
不支持 -
删除零填充,这里并不需要,因为 [ 01 -eq 1 ]
是真的(但是 [ 01 = 1 ]
不是!),但它更干净。
我目前总是 运行 6 点。曾经.
0 6 * * 1-6 server.sh backup daily # Run Monday-Saturday
0 6 * * 0 server.sh backup weekly # Run every Sunday
而且由于时间的流逝,它们有时会发生碰撞:
0 6 1 2-12 * server.sh backup monthly # Run 1st day of month (feb-dec)
0 6 1 1 * server.sh backup yearly # Run 1st of January
我之前已经改变了 weekly/monthly/yearly 的时间,这样他们就不会同时 运行。 我希望 cronjob 有一种简单的方法可以每天 6 点 运行 并每天整理/weekly/monthly/yearly
年应该出现在月、周和日、月出现在周和日之上。
对于每日和每周作业,您可以检查该月的第几天是否为 1
,如果不是则仅 运行:
0 6 * * 1-6 [ "$(date '+%%-d')" -ne 1 ] && server.sh backup daily # Run Monday-Saturday
0 6 * * 0 [ "$(date '+%%-d')" -ne 1 ] && server.sh backup weekly # Run every Sunday
格式化指令 +%%-d
是 "day of month, without zero padding"。
%%
必须加倍,否则 cron 会将其解释为换行符。
某些版本的 date
不支持 -
删除零填充,这里并不需要,因为 [ 01 -eq 1 ]
是真的(但是 [ 01 = 1 ]
不是!),但它更干净。