我想在每个月的第一个星期一 8.30 从 cron 运行一项工作。cron 维基百科页面说
而当时间/日期规范领域的所有匹配当前时间和日期执行正常的工作,有一个例外:如果“月日”和“星期几”的限制(而不是“*”),那么无论是“日期”字段 (3) 或“星期几”字段 (5) 必须与当前日期匹配。
(我的重点)
这是否意味着我不能在一个月的第一个星期一做,我只能在一个月的第一天(或其他任何一天)做?我想不出办法绕过它。
slh*_*hck 50
您可以将条件放入实际的 crontab 命令中(通用方式):
[ "$(date '+%u')" = "1" ] && echo "It's Monday"
Run Code Online (Sandbox Code Playgroud)
如果您的语言环境是 EN/US,您还可以比较字符串(初始答案):
[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"
Run Code Online (Sandbox Code Playgroud)
现在,如果此条件在一个月的前 7 天中的某一天为真,则您将迎来第一个星期一。请注意,在 crontab 中,需要转义百分比语法(通用方式):
0 12 1-7 * * [ "$(date '+\%u')" = "1" ] && echo "It's Monday"
Run Code Online (Sandbox Code Playgroud)
如果您的语言环境是 EN/US,您还可以比较字符串(初始答案):
0 12 1-7 * * [ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"
Run Code Online (Sandbox Code Playgroud)
将echo命令替换为您要运行的实际命令。我也找到了类似的方法。
小智 24
我有一台语言环境为西班牙语的计算机,因此,这种方法对我不起作用,因为mon更改为lun
其他语言也会失败,因此,我对消除语言障碍的公认答案做了一些改动:
0 9 1-7 * * [ "$(date '+\%u')" = "1" ] && echo "¡Es lunes!"
Run Code Online (Sandbox Code Playgroud)
小智 10
当不需要处理天数时,我发现它更容易。
运行每月的第一个星期一:
0 2 * * 1 [ `date '+\%m'` == `date '+\%m' -d "1 week ago"` ] || /path/to/command
Run Code Online (Sandbox Code Playgroud)
即,如果 1 周前的月份与当前月份不同,那么我们处于该月的第 1 天(= 星期一)。
同样,对于第三个星期五
0 2 * * 6 [ `date '+\%m'` == `date '+\%m' -d "3 weeks ago"` ] || /path/to/command
Run Code Online (Sandbox Code Playgroud)
即如果 3 周前的月份与当前月份不同,那么我们在该月的第 3 天 6(= 星期五)
由于我使用 php 和 js 解释 cron 语句,因此我无法使用 bash。最后我发现实际上只用 cron就可以实现:
0 30 8 * 1/1 MON#1
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助。无论如何,我祝大家度过美好的一天。:-)
小智 5
我已安排在每个月的第 4 个星期一下午 4:00 运行作业,如下所示:
0 16 22-28 * Mon [ "$(date '+\%a')" == "Mon" ] && touch /home/me/FourthMonOfMonth.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87598 次 |
| 最近记录: |