我有一个 bin/bash 脚本,mysqldump 我的 sql 数据库,当我运行它时,文件大小=3MB,一切顺利,但是当 crontab(作为 sudo)运行脚本时,文件大小为 20B
脚本
#!/bin/bash
cd /home/blades/backup/databases
DATE=$(date +"%d-%m-%Y_%H:%M:%S")
mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz
和 sudo crontab -e
30 04 * * * /home/blades/backup/backup
我究竟做错了什么?
答案1
您需要通过添加来记录您的错误
2>/tmp/mysqldump.log
找出错误是什么。
很可能是您的 cron 环境设置不PATH
正确。因此,您可以做的第一件事就是将完整路径添加到您的mysqldump
和gzip
命令中,这可能会解决您的问题。
如果没有,只需检查错误日志。
答案2
尝试添加 mysqldump 的完整路径。/usr/bin/mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz
(/usr/bin/mysqldump 是一个例子。它可能位于您系统中的另一个位置)。从 crontab 运行的脚本在另一个“位置”运行,因此不包含您当前用户的 $PATH 定义。您当前的用户很可能在其 $PATH 环境变量中定义了 mysqldump 路径,这就是为什么当您手动运行脚本时不会出现问题。同样适用于gzip
。
答案3
好的,我设法解决了它,在 .my.cnf 文件中我必须指定 mysqldump和客户端,不仅是 mysqldump,还有文件 .my.cnf(之后 chmod 为 400)
[client]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx
[mysqldump]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx
另一件事是选项必须先于 localhost 等,因此脚本如下
/usr/bin/mysqldump --defaults-file=/home/username/.my.cnf --single-transaction -h localhost database_name | gzip -9 > database_name.sql_$DATE.gz
就这样,无论如何,谢谢你的帮助