Cron 作业糟糕的月份

Cron 作业糟糕的月份

我正在编写一个脚本,用于安装/设置 mysql 备份的 cron 作业

这是我的脚本

croncmd="5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1"

if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q "$croncmd"; echo $?) == 1 ]]
then
    echo $(crontab -l ; echo "$croncmd") | crontab -
fi

问题是我一直收到错误的日期

"-":0: bad day-of-month
errors in crontab file, can't install.

您能否帮助我正确设置我的 cron 作业,以便它每天晚上 01:10 运行。

如果您需要任何其他信息,请告诉我,我会提供。

谢谢

答案1

该脚本没有必要那么复杂。您可以这样做:

croncmd='5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1'

if ! crontab -l | egrep -v '^(#|$)' | grep -Fq "$croncmd"
then
    ( crontab -l; echo "$croncmd" ) | crontab -
fi

当你执行 时echo $(crontab -l; echo "$croncmd"),不带任何引号,当 shell 扩展它时,内容将受到字段拆分和通配符扩展。因此,其中的任何内容*都将扩展为当前目录中的文件名,例如:

$ echo $(echo "*")
bin Desktop dev Documents Downloads examples.desktop Music Pictures Public snap Templates Videos

直接使用复合命令 - ( crontab -l; echo "$croncmd" )" and send the output tocrontab` 更简单、更轻松,无需使用额外的 echo。


另外grep,您不希望将 grep 视为5 1 *正则表达式,因此请使用-F选项。

相关内容