0

希望我在正确的论坛上发布它..

基本上,我正在尝试运行一个脚本,该脚本将执行 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

有效,因为如果我在命令行运行它,它会生成文件。

非常感谢任何帮助!

4

3 回答 3

2

试试这个:

/opt/lampp/bin/mysqldump -u root xyz > backup_$(date +%Y%m%d).sql

将该根用户的密码放在-p(password)没有空格的位置,它应该可以工作。

于 2013-09-16T12:11:17.340 回答
0

这个脚本在什么用户 ID 下运行?它将尝试将您的备份文件写入该特定帐户的主目录。确保该帐户对该目录具有写入权限,并且可以访问通往该位置的所有父目录。

除此之外,请注意您的脚本有些草率。考虑一下(也许)您会将脚本设置为每天晚上 11 点运行。如果转储时间超过 1 小时,您会将不同的日期转储到日志文件中(顺便说一下,您将覆盖,而不是附加,因为您使用的是>,而不是>>)。要解决此问题,您需要在脚本开头生成/分配日期给变量,然后使用该变量而不是更多的日期调用。

于 2012-11-20T01:43:16.220 回答
0

所以当 crontab 运行 shell 脚本时,backup_(date).sql 文件实际上保存在 /root 文件夹下。

手动运行 shell 脚本会将 SQL 文件放在 shell 脚本所在的位置。

于 2013-10-08T20:10:31.203 回答