每个月都会执行Crontab作业

时间:2015-07-08 14:27:15

标签: linux shell crontab

三天前,我用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,结果相同:/

谢谢。

4 个答案:

答案 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相当于

  • 你的shell脚本中的
  • 使用额外的测试在本月的第一天悄然退出。

该测试可以像

一样简单
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}}被执行时才会被执行。