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

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

我已经设置了一个备份脚本,使用 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

答案1

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

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

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

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1

答案2

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

30 * * * * backup.sh > ~/logs/backup.log

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

MAILTO=""

答案3

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

30 * * * * backup.sh >/dev/null 2>&1

答案4

您应该将以下内容添加到您的gnu tar命令:--警告=无文件更改

这将压制所有“%s:文件在我们读取时已更改“消息。通过使用此解决方案(而不是将所有内容重定向到 /dev/null),当事情确实出错时,您仍然能够收到错误消息。


随着- 警告标记您可以启用和禁用许多不同的消息柏油印刷。以下是手册的相关部分,其中包含您可以使用的所有关键字:https://www.gnu.org/software/tar/manual/html_section/tar_27.html

注意:通过添加“不-" 在关键字前面,该消息将被抑制。

相关内容