Cron può scrivere l'output del lavoro in un registro * per impostazione predefinita * (invece della posta)?


23

Sappiamo tutti che il modo giusto di gestire l'output dai cron job è reindirizzarlo su un file:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Tuttavia, a volte gli amministratori sono pigri, smemorati o ignoranti e non inseriscono quei reindirizzamenti; in questo caso l'output del lavoro viene inviato a $ MAILTO o all'utente proprietario o root. In alcune delle caselle che gestisco, la posta è disabilitata, quindi questo output finisce in un buco nero. Quello che mi chiedo è, c'è un modo per dire a cron di accettare qualsiasi output di lavoro e invece di inviarlo per posta, gettarlo in un file di registro generico da qualche parte? Sto usando Ubuntu (8.04 ma sto migrando verso 9.04). C'è un accenno a tale soluzione in questo risultato casuale di Google , ma penso che l'OP potrebbe essere stato confuso sull'output cron rispetto all'output dei processi cron.

Sono aperto a soluzioni che implicano un po 'di scripting o hacking, ma idealmente questo sarebbe un po' di configurazione che potrei impostare da qualche parte. Non vedo alcun suggerimento in man cron. Grazie!

Risposte:


1

Per croniecron (che è raccomandato ad esempio dal Manuale di Gentoo), esiste un argomento "-s" per la chiamata cron, che invia l'output del lavoro al registro di sistema usando syslog.


3

La risposta breve è no, cron mail al proprietario del crontab in base alla progettazione. Nel cron standard non c'è modo di cambiarlo.

Il meglio che mi viene in mente è configurare gli MTA sui computer in cui si desidera che questo comportamento esegua il dump della posta in un file di registro anziché in una cassetta postale dell'utente.


3

Non sono sicuro di cosa intendi esattamente quando dici "la posta è disabilitata". Ma forse potresti creare un alias /etc/aliasesche è diretto a una pipe? Qualcosa di simile a

root: "|/bin/cat >> /var/log/cron.log"

root: /var/log/cron.lognon funziona? feep.net/sendmail/tutorial/intro/aliases.html
endolith

Né fa niente per me.
endolito il

Questi potrebbero funzionare solo se stai eseguendo sendmail come MTA. Questo sta diventando meno comune. (Sì, lo so che sto rispondendo a un commento di 5 anni!)
Alex L

2

Non penso che ciò che stai chiedendo sia effettivamente possibile con Ubuntu (o qualsiasi altro) cron.

A parte l'idea di geekmonkeys, puoi anche impostare $ MAILTO su un account locale e instradare l'output tramite procmail.


1

Non ho mai sentito parlare di una simile impostazione per cron, quindi prenderei il percorso di scripting.

Crea un lavoro cron su patrol / var / spool / cron / * e aggiungi il reindirizzamento a qualsiasi lavoro che non ne abbia uno.


1

Un'altra opzione sarebbe quella di creare uno script shell chiamato cron_wrapper o qualcosa del genere, e fare in modo che faccia qualcosa del genere:

#! / Bin / sh

eval "$ * >> /var/log/cronlog.log"
uscita $?

Quindi, tutti i tuoi crontab hanno solo bisogno di qualcosa del genere:

* * * * * / usr / local / bin / cron_wrapper ciao eco

Nota Non ho testato questo codice, è solo un'idea.


1
Questo non risolve il problema. Se le persone non riescono a ricordare di impostare MAILTO o di reindirizzare stdout su un file, non si ricorderanno di eseguire cose attraverso il wrapper.
Kamil Kisiel,

1

Non so quale sia il "cron standard". Ci sono molti demoni cron, diverse distribuzioni ne usano diverse. Vixie cron è il più ampiamente distribuito, quindi è probabilmente quello che volevi dire. Ma su alcune distro, non sarebbe l'impostazione predefinita.

Ho assunto lo sviluppo del cron di Dillon (dcron), che è l'impostazione predefinita su Arch Linux. Anche altre distribuzioni lo usano, ma non so se è l'impostazione predefinita altrove. dcron ha un'opzione di invocazione -Mper specificare che si desidera utilizzare uno script personalizzato anziché sendmail. Lo script viene chiamato senza argomenti e con alcune intestazioni e-mail e l' &>output di tutti i cronjob come stdin. (Se non c'è &>output, lo script non viene chiamato.)


1

perché non impostiamo MAILTO = "" nel crontab dell'utente in particolare. Ciò disabiliterà la registrazione dei messaggi di posta in / var / spool / mail /

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.