linux - rdiff-backup bash 脚本和 cron 问题

标签 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”创建它们。

最佳答案

首先你需要确保cron中使用的脚本没有输出任何东西,否则:

  1. cron 会假设有错误
  2. 你不会看到任何错误

一个解决方案是使用

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/

相关文章:

linux - 移动或删除文件时使 `tail -f` 退出的 bash 脚本

linux - 有没有办法使用 ls 和通配符从 s3 存储桶中提取文件? (aws 客户端)

bash - 如何在 WSL2 中运行的 vscode 中设置 bash

linux - 无法使用主管运行 ffmpeg 进程

linux - 从用户空间访问 ARM PLE(预加载引擎)(或如何获得全带宽内存访问)

linux - 在 shell 脚本中获取命令输出

bash - 如何从 unix 脚本发送电子邮件

linux - 守护进程 cron 不工作

cron - 如何检查Macbook Lid是否通过终端关闭?

linux - 一次运行脚本两次