三天前,我用crontab -e安装了以下crontab作业:
# execute weekly
0 2 2-31 * 7 sh /home/user/folder/myscript.sh week > /home/user/.crontablog/crontab.log
它应该在每个星期日凌晨2点执行,除了当月1日。然而,它每天凌晨2点执行。我的错是什么?我在周日尝试了0而不是7,结果相同:/
谢谢。
答案 0 :(得分:2)
因为crontab的格式是这样的:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed
要在星期日每周执行一次,不管月份是什么,你需要这样写:
0 2 * * 7 sh /home/user/folder/myscript.sh week > /home/user/.crontablog/crontab.log
答案 1 :(得分:1)
首先,您可以分析/ var / log / cron的内容,为脚本添加grepping以查看正在发生的事情。
我建议你使用以下语法
0 2 * * sun /home/user/folder/myscript.sh week
在脚本文件上给予了+ x权限。 干杯
答案 2 :(得分:0)
现在您在评论中重新指定了您需要做两件事的问题:
如上所述,使用0 2 * * 7 to run at 2:00am every Sunday
; 7和0相当于
使用额外的测试在本月的第一天悄然退出。
该测试可以像
一样简单test $(date +%d) == "01" && exit
但你当然也可以使if ...
更加echo
和更加轻柔。
答案 3 :(得分:0)
如果您想在每个星期天凌晨2点运行脚本,但仅当它不是该月的第一天,那么您必须使用以下语法:
0 2 * * 0 /usr/bin/test $(/bin/date +\%e) -ne 1 && your_command
test
utilliy最终会检查它是否是月中的第一天,而your_command
只会在{{1}}被执行时才会被执行。