Cron提示“crontab文件中有错误,无法安装”

3

我试图执行以下一系列命令来创建MySQL数据库的备份。

当我尝试使用crontab -e将命令添加到我的crontab时,会出现错误“crontab文件中有错误,无法安装”,并询问我是否要重试。

mkdir /home/mysql-backup/`date '+%m-%d-%Y'`; mysql -s -r -e 'show databases' | while read db; do mysqldump $db -r /home/mysql-backup/`date '+%m-%d-%Y'`/${db}.sql; done; rm -r -f `date --date="1 week ago" +%m-%d-%Y`; du -k |sort -n > output; mail -s "MySQL Backups" "steven@brightbear.net" < output

这个文件里面有什么需要我改动的吗?还是我应该考虑创建一个脚本文件并从cron调用它。

非常感谢您提供的任何帮助。


1
一定要将其拆分为脚本,你没有任何错误检查或处理。现在它可以工作,但当它死掉时,你可能想知道为什么它死了。 - Anew
你是否指定了任务执行的频率?例如 1 2 * * * command args - Alex V
3个回答

6
如果你将那个脚本给了crontab -e,当然会有问题。在crontab文件中,一行应该以5个字段开头,表示你想要脚本运行的时间,详见crontab的manpage
另一方面,如今大多数Linux发行版都预设了按小时(/etc/cron.hourly)、按天(/etc/cron.daily)等执行任务的设施。只需将你的脚本放入适当目录下的一个文件中,它就会在所选时间段内被执行。额外的好处是,在这些文件中,你不必把所有内容都塞进一行里,这样更容易些。

0

是的,作为一种风格,我鼓励将SQL命令放入shell脚本中,然后从cron运行shell脚本。 (正如Anew指出的那样,如果将命令序列分解成多行并添加注释,则更容易维护/调试。)但是——你要输入到crontab的是否只有这些?请查看man crontab并添加指定命令何时运行的字段。


0

crontab(5)手册页面来看,百分号(%)具有特殊含义,这可能是你遇到问题的地方。

是的,你应该将命令放入一个单独的shell脚本中,然后只需从crontab行中调用它。这也会使读取crontab文件变得更加容易,并且你可以对脚本进行良好的格式化,以便更容易维护。而且你可以通过这种方式单独测试它,而不是通过crontab。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接