我有一个 shell 脚本来获取 MySQL 数据库转储。此脚本在手动运行时运行良好
#!/bin/sh
fqn=/home/Mysqluser/daily_dumps/bookstore_`date +%Y%m%d_%H%M%S`.sql.gz
mysqldump -u root -h localhost -pmysql#passwd bookstore | gzip > $fqn
但是,当我将该脚本包含在 cron 作业中运行时,它不会进行备份。
这是我在 cron 作业中包含的内容:
00 00 * * * /home/Mysqluser/daily_dumps/bin/backup_database.sh
我在这里遗漏了什么?
答案1
这可能是因为环境(env
在提示符下输入即可看到)不同。
我在尝试在 cron.daily 中运行 mysql 查询时遇到了类似的问题,我通过添加此标志解决了它--defaults-file=/root/.my.cnf
mysqldump 似乎有一个类似的标志--defaults-extra-file
(需要作为第一个参数),但如果它不起作用,请尝试找出命令行环境和 cron 环境之间的区别。创建一个 cronjob,将输出打印env
到文件中,并将其与从 shell 运行它时获得的结果进行比较。
答案2
此外,从 cron 运行时,请确保位于mysqldump
。最佳做法是直接在脚本中$PATH
设置,或者指定调用的任何命令的完整路径(例如)。$PATH
/usr/bin/mysqldump