为什么这个带有 shell 脚本的 cron 作业会失败?

为什么这个带有 shell 脚本的 cron 作业会失败?

我创建了一个 cron 作业来执行每日备份,并将其存储在目录 /backups 中

此备份目录位于 VPS 服务器的根目录 [/],是我们的 VPS 主机提供的单独备份分区。即,它存储在不同的磁盘上。

所以我创建了一个小型 shell 脚本来运行备份并将它们存储在那里。

#!/bin/sh
mysqldump --all-databases | gzip > /backups/dbbackup-`date +%Y-%m-%d`.sql.gz

这将创建一个带有日期的 .gz 备份。它有效,因为当我运行它时,我得到了我想要的东西。

但我希望在 cron 作业中执行此操作。我编辑了 crontab 并将其设置为每天晚上 9 点运行。

0 21 * * * /backups/DBBackups.sh

我今天早上检查了 cron 日志,它运行了,

Jun 20 21:00:01 973900 CROND[13279]: (root) CMD (/backups/DBBackups.sh)

但是/backups目录中没有文件。

我哪里做错了?它会在我没有检查的地方出现错误吗?

我对这个还是个新手。稍后我想按表导出特定数据库,因为如果我需要的话,2gb 的 .sql 文件很难处理。另外,我可能很快就会达到某种最大文件大小。但留给我吧。如果有人能帮助正确运行这个脚本,我将不胜感激。

答案1

问题出在您的 DBbackups.sh 脚本上。当 cron 运行时,它可能没有路径信息,肯定不是您习惯的路径信息,因为它不是从您的登录 shell 生成的,所以您需要提供绝对路径。因此,DBbackups.sh 应该是这样的:

#!/bin/sh
BACKUPDIR="/backups"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
GZIP="/bin/gzip"
DATE=`date +%Y-%m-%d`

${MYSQLDUMP} --all-databases | ${GZIP} > ${BACKUPDIR}/dbbackup-${DATE}.sql.gz

注意:你的路径可能有所不同,请使用以下命令检查 gzip 和 mysqldump 的路径

which mysqldump
which gzip

相关内容