我有这个非常简单的 bash 脚本:
#!/opt/bin/bash
/opt/bin/rdiff-backup --force --print-statistics myhost::/var/bkp /volume1/backups/sql 2>&1 > /var/log/rdiff-backup.log;
/opt/bin/rdiff-backup --force --print-statistics myhost::/var/www/vhosts /volume1/backups/vhosts 2>&1 >> /var/log/rdiff-backup.log;
/opt/bin/rdiff-backup --force --print-statistics myhost::/etc /volume1/backups/etc 2>&1 >> /var/log/rdiff-backup.log;
/opt/bin/rdiff-backup --force --print-statistics /volume1/homes /volume1/backups/homes 2>&1 >> /var/log/rdiff-backup.log;
cat /var/log/rdiff-backup.log | /opt/bin/nail -s "rdiff-backup log" me@email.com;
如果我以这种方式从命令行运行脚本:
nohup /path/to/my/scipt.sh &
它工作正常,将每个 rdiff-backup 统计报告附加到 rdiff-backup.log 并将此文件发送到我的电子邮件地址,正如预期的那样。但是,如果我将脚本放在 crontab 中,该脚本只会使一个 rdiff-backup 作业通过电子邮件发送统计信息。我无法理解,因为脚本的工作方式不同...
有什么想法吗?
这是我的 cronjob 条目:
30 19 * * * /opt/bin/bash /volume1/backups/backup.sh
通过 crontab 只有最后一个作业被正确执行,我认为因为这是唯一的本地备份。当我从命令行执行脚本时,我使用 root 用户,root 用户的公钥在远程机器的/root/./ssh/authorized_keys 中。 crontab 文件的所有者也是 root 用户,我使用 root 帐户通过“crontab -e”创建它们。
最佳答案
首先你需要确保cron中使用的脚本没有输出任何东西,否则:
- cron 会假设有错误
- 你不会看到任何错误
一个解决方案是使用
30 19 * * * /opt/bin/bash /volume1/backups/backup.sh 2>&1 >> /var/log/rdiff-backup-cron.log;
其次,您似乎在通过 cron 执行时丢失了 env 变量,请尝试将 env 设置添加到您的脚本中
#!/opt/bin/bash
. /root/.profile
/opt/bin/rdiff-backup --force --print-statistics myhost::/var/bkp /volume1/backups/sql 2>&1 > /var/log/rdiff-backup.log
如果 /root/.profile
不存在,请尝试添加 。/root/.bashrc
或 /etc/profile
希望对您有所帮助。
关于linux - rdiff-backup bash 脚本和 cron 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602683/