每月第n个星期六的Linux crontab

每月第n个星期六的Linux crontab,cron,Cron,除了星期六,我喜欢在所有工作日都跑步。 我的crontab条目 30 16 * * 1,2,3,4,5 ./backup.sh 这个条目运行良好。 另外,我喜欢在第一、第三个星期六回来。 如果一个月内有任何第五个Sutarday可用,则应运行备份。crontab的条目是什么?我猜 30 16 1-7, 15-21, 29-31 * 6 ./backup.sh 我说得对吗 我说得对吗 不,你说得不对。crontab手册说明: 注意:可以在以下两个字段中指定命令的执行日期:每月的第几天和每周的第

除了星期六,我喜欢在所有工作日都跑步。 我的crontab条目

30 16 * * 1,2,3,4,5 ./backup.sh
这个条目运行良好。 另外,我喜欢在第一、第三个星期六回来。 如果一个月内有任何第五个Sutarday可用,则应运行备份。crontab的条目是什么?我猜

30 16 1-7, 15-21, 29-31 * 6 ./backup.sh
我说得对吗

我说得对吗

不,你说得不对。crontab手册说明:

注意:可以在以下两个字段中指定命令的执行日期:每月的第几天和每周的第几天。如果两个字段都受到限制(即不包含“*”字符),当任一字段与当前时间匹配时,将运行该命令。例如
30 4 1,15*5
将导致在每月1日和15日上午4:30以及每个星期五运行命令

那我们怎么做呢?

如果要确定该月的哪个星期六,即该月的第一、第二或第三个星期六,则只需查看星期六的工作日,并执行以下整数计算:

D=$(date "+%d")
echo $(( (D-1)/7 + 1 ))
此值将返回相应的数字。这不仅适用于周六,也适用于任何工作日

由于OP希望cron在第1、第3和第5个星期六工作,因此它实际上表示cron在每个奇数星期六运行:

D=$(date "+%d")
echo $(( ((D-1)/7 + 1) % 2 ))
将此作为附加测试,允许我们将cron编写为:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed

 30 16  *  *  6   (( (($(date "+\%d") - 1)/7 + 1) % 2 == 1 )) && command
我说得对吗

不,你说得不对。crontab手册说明:

注意:可以在以下两个字段中指定命令的执行日期:每月的第几天和每周的第几天。如果两个字段都受到限制(即不包含“*”字符),当任一字段与当前时间匹配时,将运行该命令。例如
30 4 1,15*5
将导致在每月1日和15日上午4:30以及每个星期五运行命令

那我们怎么做呢?

如果要确定该月的哪个星期六,即该月的第一、第二或第三个星期六,则只需查看星期六的工作日,并执行以下整数计算:

D=$(date "+%d")
echo $(( (D-1)/7 + 1 ))
此值将返回相应的数字。这不仅适用于周六,也适用于任何工作日

由于OP希望cron在第1、第3和第5个星期六工作,因此它实际上表示cron在每个奇数星期六运行:

D=$(date "+%d")
echo $(( ((D-1)/7 + 1) % 2 ))
将此作为附加测试,允许我们将cron编写为:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed

 30 16  *  *  6   (( (($(date "+\%d") - 1)/7 + 1) % 2 == 1 )) && command

欢迎来到StackOverflow!不幸的是,这个问题并不真正属于StackOverflow,因为它与编程无关。这个问题属于。欢迎来到StackOverflow!不幸的是,这个问题并不真正属于StackOverflow,因为它与编程无关。这个问题属于我。