Przestać wysyłać maile do skryptu zapasowego?

13

Skonfigurowałem skrypt kopii zapasowej, aby co godzinę tworzył kopie zapasowe danych świata na moim serwerze Minecraft przy użyciu crona, ale ponieważ światy są stale edytowane przez graczy, tar powiedział mi, że pliki uległy zmianie podczas ich odczytu. Dodałem --ignore-command-error do tar w skrypcie i to pomija wszelkie błędy, kiedy uruchamiam go ręcznie, jednak cron nadal wysyła wiadomość e-mail z informacją, że pliki zostały zmienione podczas odczytu, i kończy się zalewanie mojej poczty, ponieważ jest biegać raz na godzinę. Czy ktoś wie jak to naprawić? To jest skrypt:

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
Furman
źródło

Odpowiedzi:

22

Cron podejmie próbę wysłania wiadomości e-mail z danymi wyjściowymi, które mogły wystąpić podczas uruchamiania polecenia. Ze strony podręcznika użytkownika crona:

Podczas wykonywania poleceń wszelkie dane wyjściowe są wysyłane pocztą do właściciela crontab (lub do użytkownika określonego w zmiennej środowiskowej MAILTO w crontab, jeśli taka istnieje). Każde wyjście zadania można również wysłać do syslog przy użyciu opcji -s.

Aby go wyłączyć dla określonego wpisu crontab, wystarczy przechwycić wszystkie polecenia wyjściowe i skierować je do pliku lub do /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
slm
źródło
1
D: używając mojego przykładu!
Braiam
@Braiam - przepraszam, byłem leniwy i nie miałem ochoty pisać tego na maszynie. W każdym razie wpisałbym to samo 8-).
slm
@Braiam - czy to jest lepsze? 8-).
slm
Działa świetnie, dokładnie tego, czego szukałem.
Carter,
Należy zauważyć, że w moich CentOS 7, z crontabnie cron, -sśrodków selinux context.....
WesternGun
13

Zamiast przesyłać wszystko do /dev/null(co może pozostawić Cię bez pojęcia, co się stanie, jeśli coś pójdzie nie tak), możesz przesyłać skrypty do plików dziennika w następujący sposób:

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

Aby przestać otrzymywać wiadomości e-mail, po prostu ustaw MAILTOzmienną na pusty ciąg na początku pliku crontab:

MAILTO=""
Enrico
źródło
4

Jeśli nie chcesz maili do konkretnego zadania Crona, możesz po prostu dodać >/dev/null 2>&1na końcu wiersza:

30 * * * * backup.sh >/dev/null 2>&1
Braiam
źródło
Wybieram w ten sposób: zgubiłeś wszystko, ale zgrabnie.
WesternGun
0

Powinieneś dodać następujące polecenie do polecenia gnu tar : --warning = no-file-change

Spowoduje to pominięcie wszystkich komunikatów „ % s: plik zmieniony podczas odczytu ”. I korzystając z tego rozwiązania (i nie przekierowując wszystkiego do / dev / null), nadal będziesz mógł otrzymywać komunikaty o błędach, gdy coś naprawdę pójdzie nie tak.


Za pomocą flagi --warning można włączać i wyłączać wiele różnych komunikatów drukowanych przez tar . Oto odpowiednia część instrukcji ze wszystkimi słowami kluczowymi, których możesz użyć: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Uwaga: poprzez dodanie słowa „ no- ” przed słowem kluczowym wiadomość zostanie pominięta.

The Silent Boatman
źródło