Frage Wie kann ich verhindern, dass Cron mein Syslog füllt?


Ich habe ein Skript, das jede Minute ausgeführt werden muss. Das Problem ist, dass Cron sich anmeldet /var/log/syslog jedes Mal, wenn es ausgeführt wird. Am Ende sehe ich, dass sich so etwas immer wieder wiederholt /var/log/syslog:

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

Ich benutze Debian.

Meine Frage ist: Kann ich irgendwie sagen, dass Cron diese Information nicht jedes Mal in syslog schreibt?


30
2018-06-25 01:00


Ursprung


Irgendeine Idee, wie man das auf einer Busybox-Plattform macht? Das Format von /etc/syslog.conf ist anders ... - Mark Lakata


Antworten:


Sie können die Ausgabe von cron an eine separate Protokolleinrichtung senden, indem Sie Folgendes zu Ihrer hinzufügen /etc/syslog.conf Datei:

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

Denken Sie daran, hinzuzufügen /var/log/cron zu deinem /etc/logrotate.d/syslog um sicherzustellen, dass es gedreht wird, z

# /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
}

25
2018-06-25 01:07



Danke für die Eingabe. Ich habe cron. * / Var / log / cron hinzugefügt und Cron neu gestartet, aber es fährt damit fort, die Nachrichten in / var / log / syslog abzulegen, während / var / log / cron leer bleibt. nicht sicher, warum es nichts tut - user7321
Oh Mann, episches Versagen meinerseits. Ich habe syslog.conf bearbeitet und cron neu gestartet !! Kein Wunder, dass es nicht funktionieren würde. Ich hätte Syslog neu starten sollen =) - user7321
Das Aktivieren von cron.log verhindert nicht, dass Cron-Nachrichten in syslog geschrieben werden. - basic6


OK,

Die Lösung für meine Frage war:

Veränderung

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

zu

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

innerhalb /etc/syslog.conf und starte syslog neu

Ich habe auch Cron geschickt /var/log/cron.log wie von Dave Cheney vorgeschlagen und ein Logrotate draufgeklebt. Mein Fix mit Daves Vorschlag ist optimal für meine Situation, weil:

  1. es hält /var/log/syslog von Cron-Nachrichten überladen werden
  2. Ich erhalte immer noch Cron-Nachrichten (was für die Fehlersuche gut ist)
  3. Logrotat hält /var/log/cron.log zu groß werden.

15
2018-06-25 04:11



Für die Betroffenen moderner Systeme gibt es ein rsyslog in Debian 8.0 Jessie, also ist es das /etc/rsyslog.conf bearbeitet werden. Übrigens sind die hinzuzufügenden Strings bereits standardmäßig vorhanden, Sie müssen sie nur auskommentieren (Zeile 63). Und /var/log/cron.log ist schon in der /etc/logrotate.d/syslog, genau wie die Paketbetreuer diesen Thread gelesen haben. - TranslucentCloud
Deine Frage war Is there any way I can tell cron not write this information to syslog every time. Dies ist nicht die Antwort. - ntd
@TranslucentCloud wollte nur hinzufügen, dass meine rsyslog-Konfiguration auf Ubuntu 14 LTS in /etc/rsyslog.d/50-default.conf war. - Johnny


Ändern Sie / 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"

Standardmäßig ist die Zeile EXTRA_OPTS ""


8
2018-05-31 17:55



Diese IMO ist die richtige Lösung: Generieren Sie den Protokollsatz nicht. - ntd


Ich habe das gerade anders gelöst, aber mein Ziel war etwas anders. Ich wollte die Cron-Log-Einträge verwerfen, die generiert wurden, als Atrun abgefeuert wurde, so dass meine Festplatten schlafen konnten und nicht alle 5 Minuten geweckt wurden.

Das Ziel eines Log-Ereignisses in syslog.conf kann ein Shell-Kommando sein, indem man es mit der Pipe voranstellt, und so benutzte ich grep, um diejenigen wegzuwerfen, die ich nicht wollte. So:

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

Ich habe es nicht untersucht, aber ich glaube, dass es möglich sein sollte, diese Logeinträge an ein anderes Ziel zu senden, wenn sie noch gesucht werden.


3
2018-06-18 15:29





Eigentlich ist die "beste" (man könnte behaupten) Lösung eine Kombination aus was @DaveCheney empfohlen und was user7321 Hat schließlich, plus eine dritte Aktion, die ich empfehlen würde:

  1. Verhindern, dass syslogd Cron-bezogene Protokollnachrichten an / var / log / syslog anfügt
  2. Sicherstellen, dass Cron-Log-Nachrichten irgendwo protokolliert werden (insbesondere in / var / log / cron) + Sicherstellen der Log-Rotation für das Cron-Log.
  3. Verhindern, dass syslogd Cron-bezogene Protokollnachrichten an / var / log / messages anfügt

In deiner /etc/syslog.confDie Kombination dieser Vorschläge ändert sich etwa wie folgt:

*.*;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

Und vergessen Sie nicht, die Cron- und Syslogd-Dienste, z. mit:

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

Hinweis: Dies funktioniert auch mit rsyslogd.


3
2018-03-29 13:28



Die beste Lösung ist, was @dfc vorgeschlagen hat, d. H. Das Protokoll nicht zuerst generieren. - ntd


In Ubuntu 14.04.5 (und wahrscheinlich anderswo) gibt es rsyslogd anstelle von syslogd. TranslucentCloud hat dies mit Debian Jessie angedeutet, aber die selbe Lösung (aber rsyslog.conf anstelle von syslogd.conf zu ändern) scheint in Ubuntu nicht zu funktionieren.

Es scheint, dass die in /etc/rsyslog.d/50-default.conf gesetzten Werte Vorrang vor dem in /etc/rsyslog.conf eingestellten haben, also ist es besser, die Änderungen vorzunehmen Dort und dann rsyslog und cron neu starten. Sonst haben Sie immer noch das Standardverhalten von Cron-Protokollierung in Syslog, Plus Cron-Protokollierung in Cronlog (aber nicht ausschließlich).

Erste paar Zeilen in meiner /etc/rsyslog.d/50-default.conf:

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

Und voila!


3
2018-04-11 20:12



Sehr nette Antwort. Das heißt, Sie können sich auf neuere Fragen für die zukünftige Teilnahme an Stack Overflow konzentrieren, da dieser extrem alt ist. - Magellan