我正在尝试执行以下一系列命令来创建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中调用它。
提前感谢您提供的任何帮助。
答案 0 :(得分:5)
如果您将该脚本提供给crontab -e
当然会不同意。 crontab文件中的一行应以5个字段开头,表示您希望脚本运行的时间为can be read in crontab's manpage。
另一方面,现在大多数Linux发行版都预设了应该每小时执行一次的功能(/etc/cron.hourly),每天执行(/etc/cron.daily)等等。这样做更容易将您的脚本放在相应目录中的文件中,它将在选定的时间栅格中执行。另一个优点是,在这些文件中,您不会被迫将所有内容塞入一行。
答案 1 :(得分:0)
是;作为一种风格问题,如果没有别的,我鼓励将SQL命令放入shell脚本,然后从cron
运行shell脚本。 (并且,正如Anew所指出的那样,如果命令序列被分成多行,并带有注释,则命令序列更容易维护/调试。)但是 - 你所提供的所有内容都是crontab
吗?查看man crontab
并添加指定希望命令运行的字段。
答案 2 :(得分:0)
在crontab(5)手册页中,看起来百分号(%)具有特殊含义,因此可能是您遇到麻烦的地方。
是的,您应该将命令放入单独的shell脚本中,然后从crontab行调用它。这也使得读取crontab文件变得更加容易,并且您可以很好地格式化脚本,以便更容易维护。你可以用crontab单独测试它。