Прекратить cron отправлять почту для резервного копирования скрипта?

13

Я настроил скрипт резервного копирования для ежечасного резервного копирования мировых данных на моем сервере Minecraft с использованием cron, но, поскольку миры постоянно редактировались игроками, tar говорил мне, что файлы менялись во время чтения. Я добавил --ignore-command-error в tar в скрипте, и он подавляет любые ошибки, когда я запускаю его вручную, однако 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
возчик
источник

Ответы:

22

Cron попытается отправить электронное письмо с любым выводом, который мог произойти при запуске команды. Из справочной страницы cron:

При выполнении команд любой вывод отправляется по почте владельцу crontab (или пользователю, указанному в переменной окружения MAILTO в crontab, если таковой существует). Любой вывод задания также можно отправить в системный журнал с помощью опции -s.

Таким образом, чтобы отключить его для конкретной записи в crontab, просто запишите все выходные команды и направьте его в файл или в /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
SLM
источник
1
D: используя мой пример!
Брайам
@Braiam - извините, я чувствовал себя ленивым и не хотел печатать это. Я бы в любом случае набрал бы то же самое 8-).
SLM
@ Брайам - это лучше? 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
Braiam
источник
Я выбираю так: вы потеряли все, но аккуратно.
WesternGun
0

Вы должны добавить следующее в вашу команду gnu tar : --warning = no-file-change

Это подавит все сообщения « % s: файл изменен, как мы его читаем ». И используя это решение (не перенаправляя все в / dev / null), вы все равно сможете получать сообщения об ошибках, когда что-то пойдет не так.


С флагом --warning вы можете включать и отключать множество различных сообщений, которые печатает tar . Вот соответствующая часть руководства со всеми ключевыми словами, которые вы можете использовать: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Примечание. Если добавить ключевое слово « no- » перед ключевым словом, сообщение будет подавлено.

Тихий Лодочник
источник