/etc/cron.daily/foo: inviare e-mail a un determinato utente anziché root?


13

Sto usando CentOS 5.5.

Abbiamo diversi cronjob memorizzati in /etc/cron.daily/. Vorremmo che l'e-mail di alcuni di questi cronjobs arrivasse a un determinato indirizzo e-mail, mentre il resto delle e-mail in /etc/cron.daily/ dovrebbe andare all'indirizzo e-mail predefinito (root @ localhost).

I cronjob in /etc/cron.daily/ vengono eseguiti dal file / etc / crontab. / etc / crontab specifica un campo 'MAILTO'. Posso ignorarlo impostando MAILTO nel mio cronjob /etc/cron.daily/foo?

Qual è il modo migliore per gestirlo?


Nota per gli utenti di CentOS 6.5 (cronie): /etc/crontabnon specifica i valori predefiniti.
Adam Monsen,

Risposte:


13

Impostazione MAILTO=user@example.orgin /etc/cron.daily/foonon funziona. L'output dello script non viene inviato a user@example.org.

La pagina all'indirizzo http://www.unixgeeks.org/security/newbie/unix/cron-1.html suggerisce anche una soluzione semplice:

Il file /etc/cron.daily/fooora contiene quanto segue:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

Questo invierà un'e-mail a "stefanl@example.org" con l'oggetto uguale al percorso completo dello script (ad es /etc/cron.daily/foo.).

Ecco cosa dice Unixgeeks.org al riguardo:

Uscita da cron

Come ho detto prima, l'output di cron viene inviato al proprietario del processo o alla persona specificata nella variabile MAILTO, ma cosa succede se non lo si desidera? Se si desidera inviare l'output a qualcun altro, è possibile semplicemente inviare l'output alla posta di comando. per esempio

cmd | mail -s Utente "Oggetto della posta"

A volte, voglio solo ricevere gli errori da un cronjob, non dallo stdout, quindi uso questo trucco. La sintassi può sembrare sbagliata a prima vista, ma state certi che funziona. Il seguente cronjob invierà STDOUT a / dev / null e quindi gestirà STDERR tramite la pipeline.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

Stessa cosa, ma invia a syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Vedi anche la mia risposta su ServerFault a Cronjob stderr su file ed e-mail


6

Una soluzione più elegante sarebbe quella di utilizzare /etc/cron.ddirettamente. Invece di avere il tuo script dentro /etc/cron.daily, mettilo da qualche parte come /usr/local/sbin/myscript.she quindi crea il file /etc/cron.d/myscriptcome:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Questo ti dà anche molto più controllo su quando il lavoro accade; per esempio solo in determinati giorni della settimana ecc. Vedi l' crontab(5)uomo per maggiori informazioni.


0

Supponendo che tu abbia accesso SA su questa macchina, puoi creare un nuovo account utente, aggiungere le attività a questo account cron attività. La posta per questo utente può quindi essere inoltrata utilizzando un file .forward nella cartella home di questo account. Potrebbe essere necessario impostare le autorizzazioni per questo utente se le attività cron richiedono l'accesso privilegiato.

Il fatto che questa o la risposta di Stefan si adatti meglio dipende davvero da quanto fastidio si desidera durante l'impostazione e se si desidera che i messaggi di errore vengano inviati all'e-mail di root o alle persone che normalmente monitorano l'output giornaliero.

In bocca al lupo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.