mysqldump 的 Shell 脚本在手动运行时可以正常工作,但在 cron 作业中无法运行?

mysqldump 的 Shell 脚本在手动运行时可以正常工作,但在 cron 作业中无法运行?

我有一个 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

相关内容