我正在编写一个脚本,用于安装/设置 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 to
crontab` 更简单、更轻松,无需使用额外的 echo。
另外grep
,您不希望将 grep 视为5 1 *
正则表达式,因此请使用-F
选项。