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

我之前已经将时间转移到每周/每月/每年,这样它们就不会同时运行。我希望cronjob有一种简单的方法可以每天6点运行并每天/每周/每月/每年进行整理

年应该存在于月、周和日,月应该存在于周和日。

4

1 回答 1

0

对于每日和每周的作业,您可以检查当月中的某天是否是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是“一个月中的一天,没有零填充”。

必须加倍,否则 cron 会将其%%解释为换行符。

某些版本date不支持-删除零填充,这里并不需要它,因为它[ 01 -eq 1 ]是真的(但[ 01 = 1 ]不是!),但它更干净。

于 2020-05-27T13:24:00.493 回答