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

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

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

所以我创build了一个shell脚本来运行备份并将其存储在那里。

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

这会创build一个附带date的.gz备份。 它的作品,因为当我运行它,我得到我想要的。

但是我想要这个工作。 我编辑了crontab并将其设置为每天晚上9点运行。

 0 21 * * * /backups/DBBackups.sh 

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

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

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

我在哪里错了? 它会吐出一个错误,我不检查?

我仍然是这个东西的初学者。 后来我想按表导出一个特定的数据库,因为一个2GB的.sql文件很难用,如果我需要它。 另外,我很可能会碰到某种最大的文件大小。 但是留给我吧。 如果任何人都可以帮助得到这个脚本正确运行,将不胜感激。

问题是与您的DBbackups.sh脚本。 当cron运行时,它可能没有path信息,当然不是你习惯的path信息,因为它不会从loginshell生成,所以你需要给绝对path。 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 

注意:和往常一样,你的path可能不同,检查你的pathgzip和mysqldump

 which mysqldump which gzip