3

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

当我尝试使用将命令添加到我的 crontab 时,crontab -e我收到错误“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 调用它。

提前感谢您提供的任何帮助。

4

3 回答 3

6

如果你给了那个脚本,crontab -e它当然会不同意。crontab 文件中的一行应以 5 个字段开头,指示您希望脚本何时运行,这可以在 crontab 的手册页中阅读

另一方面,现在大多数 Linux 发行版都为应该每小时(/etc/cron.hourly)、每天(/etc/cron.daily)等执行的事情预先设置了功能。只需放置脚本就容易多了在相应目录中的文件中,它将在选定的时间栅格中执行。另一个优点是,在这些文件中,您不会被迫将所有内容都塞进一行。

于 2013-02-08T00:40:44.027 回答
0

是的; 作为风格问题,如果没有别的,我鼓励将 SQL 命令放入 shell 脚本,然后从cron. (而且,正如 Anew 所指出的,如果命令序列被分成多行并带有注释,则它更易于维护/调试。)但是——这就是你要输入的全部内容crontab吗?查看man crontab并添加指定您希望命令何时运行的字段。

于 2013-02-08T00:40:01.167 回答
0

From the crontab(5) man page, it looks like percent signs (%) have a special meaning, so that is probably where you're running into trouble.

Yes, you should put your commands into a separate shell script and just call that from the crontab line. This will also make it much easier to read the crontab file, and you can format your script nicely so that it's easier to maintain. And you can test it separately from the crontab that way.

于 2013-02-08T00:51:34.353 回答