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


13

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

Answers:


22

Cron将尝试发送带有该命令运行时可能发生的任何输出的电子邮件。从cron的手册页:

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

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

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

1
D:以我的例子为例!
Braiam

@Braiam-对不起,我感到很懒,并且不想打字。无论如何,我都会输入相同的内容8-)。
slm

@Braiam-更好吗?8)。
slm

效果很好,正是我想要的。
卡特

请注意,在我的CentOS 7中,crontab没有cron-s表示selinux context.....
WesternGun

13

/dev/null您可以通过管道将脚本管道传输到日志文件,而不必将管道传输到所有管道(这可能使您不知道发生问题时会发生什么情况)。

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

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

MAILTO=""

4

如果您不希望为特定的cron任务发送邮件,则只需>/dev/null 2>&1在行末添加:

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

我选择这种方式:您对所有内容都一无所知,但是很整洁。
WesternGun

0

您应该在gnu tar命令中添加以下内容:-- warning = no-file-changed

这将取消所有“ %s:我们在读取文件时更改 ”消息。并且通过使用此解决方案(而不是将所有内容重定向到/ dev / null),当出现实际错误时,您仍然可以获取错误消息。


使用--warning标志,您可以启用和禁用tar打印的许多不同消息。这是手册的相关部分,其中包含您可以使用的所有关键字:https : //www.gnu.org/software/tar/manual/html_section/tar_27.html

注意:通过在关键字前面添加“ no- ”,将禁止显示该消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.