rdiff-backup bash脚本和cron麻烦

时间:2013-03-24 19:03:27

标签: linux bash cron crontab

我有这个非常简单的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”创建它们。

1 个答案:

答案 0 :(得分:1)

首先,您需要确保cron中使用的脚本不输出任何内容,否则:

  1. cron将假设有错误
  2. 如果有任何
  3. ,您将看不到错误

    解决方法是使用

    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

    我希望这会有所帮助。