W końcu utworzyłem realistyczny harmonogram tworzenia kopii zapasowych moich danych za pomocą skryptu powłoki, który jest obsługiwany przez crona w ciasnych odstępach czasu. Niestety ciągle otrzymuję puste e-maile za każdym razem, gdy CRON zostanie wykonany, i nie tylko wtedy, gdy coś pójdzie nie tak.
Czy CRON może wysyłać wiadomości e-mail tylko wtedy, gdy coś pójdzie nie tak, np. mój TAR
nie działa zgodnie z przeznaczeniem?
Oto, jak na razie skonfigurowano mój crontab;
0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com
Wielkie dzięki!
/bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)
?Korzystanie z chronicznego skryptu opakowującego wygląda na dobry pomysł; aby z niego skorzystać, nie musisz zmieniać swoich skryptów.
Zamiast:
robić:
Po prostu; będzie działał cicho, jeśli wszystko pójdzie gładko (kod wyjścia 0), ale będzie raportował w pełnym zakresie, jeśli nie, i pozwoli cronowi obsłużyć raportowanie poczty.
Więcej informacji na https://habilis.net/cronic/ .
źródło
chronic
zmoreutils
paczki: joeyh.name/code/moreutilsW szczególności instruujesz,
cron
aby zawsze wysyłać wiadomości e-mail, nawet jeśli/bin/backup.sh
(tak przy okazji, powinno być/usr/local/bin
). Wystarczy pominąć| mail -s "Backup status" [email protected]
część, a wiadomość e-mail zostanie wysłana tylko wtedy, gdy zostanie wydrukowana. Prawdopodobnie możesz (w zależności od twojegocron
) jawnie ustawić adres e-mail na mail jako zadanie w pliku crontab.Aby uzyskać szczegółowe informacje, patrz
źródło
Powinieneś kierować i
stderr
nie zarównostdout
istderr
.1> /dev/null
Nie używaj2>&1
i powinno być dobrze. Ponadto może być konieczne prawidłowe zgłoszenie błędu w skrypcie kopii zapasowej.źródło
Oto kolejna odmiana, którą z powodzeniem stosuję od wielu lat - przechwytuj dane wyjściowe i drukuj je tylko w przypadku błędu , uruchamiając wiadomość e-mail. Nie wymaga to plików tymczasowych i zachowuje wszystkie dane wyjściowe . Ważną częścią jest to,
2>&1
że przekierowuje STDERR do STDOUT.Wyślij całe dane wyjściowe za pomocą domyślnej konfiguracji cron mailera:
To samo, ale z określonym adresem i tematem:
(adres można również zmienić, ustawiając MAILTO = xxxx dla całego pliku crontab)
Możesz nawet wykonać wiele działań w przypadku błędu i dodać do wiadomości e-mail:
Będzie to działać w przypadku prostych poleceń. Jeśli masz do czynienia ze złożonymi potokami (
find / -type f | grep -v bla | tar something-or-other
), lepiej jest przenieść komendę do skryptu i uruchomić skrypt przy użyciu powyższego podejścia. Powodem jest to, że jeśli jakakolwiek część potoku wysyła do STDERR, nadal będziesz otrzymywać e-maile.źródło