我的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
表现也很好。收到的邮件包含月份名称。
答案 0 :(得分:1)
语法正确。 {8}必须在8月7日触发第3行的执行。
是的,你应该在07年8月收到一封电子邮件,与备份脚本的结果(甚至存在)无关。
如果您没有收到电子邮件,可能的原因是:
cron
已关闭(或整个机器已关闭)cron
我检查系统日志中的cron执行,电子邮件提交以及执行cron
。