![停止 cron 发送备份脚本邮件?](https://linux22.com/image/49225/%E5%81%9C%E6%AD%A2%20cron%20%E5%8F%91%E9%80%81%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC%E9%82%AE%E4%BB%B6%EF%BC%9F.png)
我已经设置了一个备份脚本,使用 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。
注意:通过添加“不-" 在关键字前面,该消息将被抑制。