Come posso impedire a cron di riempire il mio syslog?


32

Ho una sceneggiatura che deve essere eseguita ogni minuto. Il problema è che cron si registra /var/log/syslogogni volta che viene eseguito. Finisco per vedere qualcosa di simile ripetuto più volte /var/log/syslog:

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

Sto usando Debian.

La mia domanda è: c'è un modo in cui posso dire a cron di non scrivere queste informazioni su syslog ogni volta?


1
Qualche idea su come farlo su una piattaforma Busybox? Il formato di /etc/syslog.conf è diverso ...
Mark Lakata,

Risposte:


25

È possibile inviare l'output di cron a una funzione di registro separata aggiungere quanto segue al /etc/syslog.conffile:

# Log cron stuff
cron.*                                                  /var/log/cron

Ricorda di aggiungere /var/log/cronal tuo /etc/logrotate.d/syslogper assicurarsi che venga ruotato, ad es

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

Grazie per l'input. Ho aggiunto cron. * / Var / log / cron e riavviato cron ma continua a scaricare i messaggi in / var / log / syslog lasciando vuoto / var / log / cron. non so perché non
stia

1
oh amico, epico fallimento da parte mia. Stavo modificando syslog.conf e riavviavo cron !! Non c'è da meravigliarsi che non funzionasse .. Avrei dovuto riavviare syslog =)
user7321

1
L'abilitazione di cron.log non impedisce la scrittura di messaggi cron su syslog.
basic6

16

Ok,

La soluzione alla mia domanda era:

modificare

*.*;auth,authpriv.none     -/var/log/syslog

a

*.*;cron,auth,authpriv.none     -/var/log/syslog

all'interno /etc/syslog.confe quindi riavviare syslog

Ho anche ricevuto cron su /var/log/cron.logcome suggerito da Dave Cheney e bloccato un logrotate su di esso. La mia correzione con il suggerimento Daves è ottimale per la mia situazione perché:

  1. continua /var/log/syslogad essere ingombra di messaggi cron
  2. Ricevo ancora messaggi cron (che è utile per la risoluzione dei problemi)
  3. logrotate continua /var/log/cron.loga non diventare troppo grande.

7
Per coloro che sono interessati ai sistemi moderni, rsyslogin Debian 8.0 Jessie esiste un file , quindi è /etc/rsyslog.confnecessario modificarlo. A proposito, le stringhe da aggiungere sono già lì per impostazione predefinita, devi solo decommentarle (riga 63). Ed /var/log/cron.logè già in /etc/logrotate.d/syslog, proprio come i manutentori del pacchetto hanno letto questa discussione.
TranslucentCloud

La tua domanda era Is there any way I can tell cron not write this information to syslog every time. Questa non è la risposta
ntd

@TranslucentCloud Volevo solo aggiungere che la mia configurazione di rsyslog su Ubuntu 14 LTS era in /etc/rsyslog.d/50-default.conf.
Johnny,

8

Cambia / etc / default / cron

  # Or, to log standard messages, plus jobs with exit status != 0:
  # EXTRA_OPTS='-L 5' 
  #
  # For quick reference, the currently available log levels are:
  #   0   no logging (errors are logged regardless)
  #   1   log start of jobs
  #   2   log end of jobs
  #   4   log jobs with exit status != 0
  #   8   log the process identifier of child process (in all logs)
  #
  EXTRA_OPTS="-L 0"

Per impostazione predefinita, la riga EXTRA_OPTS è ""


Questa IMO è la soluzione corretta: non generare il record del registro.
ntd

4

In Ubuntu 14.04.5 (e probabilmente altrove) c'è rsyslogd invece di syslogd. TranslucentCloud ha accennato a questo con Debian Jessie, ma la stessa soluzione (ma cambiando rsyslog.conf invece di syslogd.conf) non sembra funzionare in Ubuntu.

Sembra che i valori impostati in /etc/rsyslog.d/50-default.conf avranno effettivamente la precedenza sugli elementi impostati in /etc/rsyslog.conf, quindi è meglio apportare le modifiche e quindi riavviare rsyslog e cron. Altrimenti finirai comunque con il comportamento predefinito di cron logging su syslog, oltre a cron logging su cronlog (ma non esclusivamente).

Prima coppia di righe nel mio /etc/rsyslog.d/50-default.conf:

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

E voilà!


1
Risposta molto bella. Detto questo, potresti voler concentrarti su domande più recenti per la futura partecipazione a Stack Overflow poiché questa è estremamente vecchia.
Magellan,

3

L'ho appena risolto in un modo diverso, ma il mio obiettivo era leggermente diverso. Volevo eliminare le voci del registro cron che venivano generate quando atrun veniva attivato in modo che i miei dischi rigidi potessero dormire e non essere svegliati ogni 5 minuti.

Puoi avere la destinazione di un evento log in syslog.conf essere un comando shell anteponendolo alla pipe, e quindi ho usato grep per buttare via quelli che non volevo. Così:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

Non ho studiato ma credo che dovrebbe essere possibile inviare quelle voci di registro a un altro target se sono ancora desiderate.


3

In realtà, la soluzione "migliore" (si potrebbe affermare) è una combinazione di ciò che @DaveCheney ha suggerito e di ciò che user7321 alla fine ha fatto , oltre a una terza azione che consiglierei:

  1. Impedire a syslogd di aggiungere messaggi di registro relativi a cron a / var / log / syslog
  2. Assicurarsi che i messaggi del registro cron vengano registrati da qualche parte (in particolare, in / var / log / cron) + garantendo la rotazione del registro per il registro cron.
  3. Impedire a syslogd di aggiungere messaggi di registro relativi a cron anche a / var / log / messages

Nel tuo /etc/syslog.conf, la combinazione di questi suggerimenti cambia qualcosa di simile al seguente:

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

in:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

E non dimenticare di ricaricare forzatamente (o riavviare) entrambi i servizi cron e syslogd, ad esempio usando:

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

Nota: funziona anche con rsyslogd.


La soluzione migliore è quanto suggerito da @dfc, ovvero non generare il registro in primo luogo.
ntd
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.