停止 cron 发送邮件备份脚本?

Car*_*ter 14 cron backup email

我已经设置了一个备份脚本来使用 cron 每小时备份我的 Minecraft 服务器上的世界数据,但是由于玩家不断编辑世界,tar 告诉我文件在读取时发生了变化。我在脚本中的 tar 中添加了 --ignore-command-error 并在我手动运行它时抑制了任何错误,但是 cron 仍然发送邮件消息说文件在读取时已更改,最终导致我的邮件泛滥,因为它是每小时运行一次。有人知道怎么修这个东西吗?这是脚本:

filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 28

Cron 将尝试发送一封电子邮件,其中包含运行命令时可能发生的任何输出。从 cron 的手册页:

执行命令时,任何输出都会通过邮件发送给 crontab 的所有者(或者发送给在 crontab 中的 MAILTO 环境变量中指定的用户,如果存在的话)。也可以使用 -s 选项将任何作业输出发送到 syslog。

因此,要为特定的 crontab 条目禁用它,只需捕获所有命令输出并将其定向到文件或/dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

  • D:用我的例子! (2认同)

小智 15

/dev/null您可以将脚本通过管道传输到日志文件,而不是通过管道传输所有内容(如果出现问题,这可能会让您不知道发生了什么),如下所示:

30 * * * * backup.sh > ~/logs/backup.log
Run Code Online (Sandbox Code Playgroud)

要停止接收邮件,只需MAILTO在 crontab 文件的开头将变量设置为空字符串:

MAILTO=""
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿写 `30 * * * * backup.sh >> ~/logs/backup.log 2>&1` (2认同)

Bra*_*iam 5

如果您不希望特定 cron 任务的邮件,您可以简单地>/dev/null 2>&1在行末尾添加:

30 * * * * backup.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)