希望我在正确的论坛上发帖..
基本上,我正在尝试运行一个脚本来执行MySQL数据库转储,该脚本在我手动运行时有效,但crontab似乎由于某种原因没有运行该特定脚本。
我的crontab是这样设置的(出于测试目的,每分钟运行一次):
* * * * * /opt/lampp/htdocs/xyz/backup/backup.sh
脚本设置如下:
#!/bin/bash
# Script to backup the database
/opt/lampp/bin/mysqldump -u root xyz > backup_$(date +%Y%m%d).sql
echo " backup_$(date +%Y%m%d)" > /opt/lampp/htdocs/xyz/backup/log.txt
我知道脚本会运行,因为会创建log.txt。但由于某种原因,没有生成SQL文件。我也知道那条线
/opt/lampp/bin/mysqldump -u root xyz > backup_$(date +%Y%m%d).sql
有效,因为如果我在命令行运行它,它会生成文件。
任何帮助非常赞赏!
答案 0 :(得分:1)
试试这个:
/opt/lampp/bin/mysqldump -u root xyz > backup_$(date +%Y%m%d).sql
将root用户-p(password)
的密码放在没有空格的位置,它应该可以正常工作。
答案 1 :(得分:0)
此脚本运行的用户ID是什么?它会尝试将您的备份文件写入该特定帐户的homedir。确保此帐户具有该dir的写入权限,并且可以访问通往该地点的所有父目录。
除此之外,请注意您的脚本有些怪异。考虑比你(也许)将脚本设置为每天晚上11点运行。如果转储花费的时间超过1小时,那么你将把一个不同的日期转储到日志文件中(顺便说一下,你将覆盖它,而不是追加,因为你在使用>
,而不是{{ 1}})。要解决此问题,您需要在脚本开头为变量生成/分配日期,然后使用该变量而不是更多日期调用。
答案 2 :(得分:0)
因此,当crontab运行shell脚本时,backup_(date).sql文件实际上保存在/ root文件夹下。
手动运行shell脚本将SQL文件放在shell脚本所在的位置。