我有这个非常简单的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”创建它们。
答案 0 :(得分:1)
首先,您需要确保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
我希望这会有所帮助。