为什么我的一些cronjobs从未执行过?

时间:2016-09-02 05:13:57

标签: linux bash cron

我的crontab中有以下cronjobs:

0  22 *   *    1-6 /root/sbin/mysqlbackup --conf-dir=/root/etc/backup --source=MonitoringServer --set-name=$(date +"\%A")                                             2>&1 | mail -s "Backup /MonitoringServer" it@example.com
0  22 *   *    0   [ "`date +\%d`" -gt 7 ] && /root/sbin/mysqlbackup --conf-dir=/root/etc/backup --source=MonitoringServer --set-name=Woche$((($(date +\%-d)-1)/7+1)) 2>&1 | mail -s "Backup /MonitoringServer" it@example.com
0  22 *   2-12 0   [ "`date +\%d`" -lt 8 ] && /root/sbin/mysqlbackup --conf-dir=/root/etc/backup --source=MonitoringServer --set-name=$(date +"\%B")                  2>&1 | mail -s "Backup /MonitoringServer" it@example.com
0  22 *   1    0   [ "`date +\%d`" -lt 8 ] && /root/sbin/mysqlbackup --conf-dir=/root/etc/backup --source=MonitoringServer --set-name=$(date +"\%Y")                  2>&1 | mail -s "Backup /MonitoringServer" it@example.com

而第一行应该在每个星期一到星期六(工作)生成备份。 除了第一周(工作)之外,第二行应该使用每周的星期作为名称生成每周日的备份。 第三行应该在2月到12月的每个第一个星期日执行(不起作用)。 最后一行应该在每年的第一个星期日执行(如果被调用则不知道)。

一切似乎都适合我。谁能告诉我为什么第三行不起作用?

更新

✓ root@mirror ~$  echo $(date +"%B");
September
✓ root@mirror ~$  [ "`date +%d`" -lt 8 ] && echo "Test"
Test
✓ root@mirror ~$  echo "`date +%d`"
02

更新

8月8日(上个月的星期日),没有发送任何邮件。意味着如果工作已被执行,那么必须至少有一个空邮件?

更新

/root/sbin/mysqlbackup --conf-dir=/root/etc/backup --source=MonitoringServer --set-name=$(date +"\%B")

使用sh shell(默认情况下由cron使用)和使用bash shell(在crontab的开头配置)执行得很好。

19 8 * 2-12 5 [ "`date +\%d`" -lt 8 ] && echo $(date +"\%B") 2>&1 | mail -s "Backup /MonitoringServer" it@example.com

表现也很好。收到的邮件包含月份名称。

1 个答案:

答案 0 :(得分:1)

语法正确。 {8}必须在8月7日触发第3行的执行。

是的,你应该在07年8月收到一封电子邮件,与备份脚本的结果(甚至存在)无关。

如果您没有收到电子邮件,可能的原因是:

  • cron已关闭(或整个机器已关闭)
  • 您为cron
  • 配置了错误的SHELL
  • 邮件服务已关闭。

我检查系统日志中的cron执行,电子邮件提交以及执行cron