Frage zu logrotate

  • Hallo zusammen!


    Irgendwie verstehe ich das Verhalten von Logrotate nicht so ganz. Ich habe eine eigene config in /etc/logrotate.d abgelegt um die SysCP Apache Logs zu rotieren. Das habe ich erst mal auf einem Testumgebung-Server gemacht und zum testen den Intervall daily gewählt.
    Eigentlich sollte die Rotation immer um 6:25 Uhr ausgeführt werden, so wie alle anderen daily-Rotationen auch. Bei meiner benutzerdefinierten config wird die Rotation aber zu vollkommen unterschiedlichen Zeiten ausgeführt und am 26. Dezember wurde sie sogar 2 mal, zu unterschiedlichen Zeiten, ausgeführt.
    Die Logrotate config ist die gleiche wie die Default Apache2. Lediglich der Pfad zu den SysCP Apache Logs wurde angepasst. Wie gesagt, die Rotation funktioniert prinzipiell und wird auch täglich ausgeführt, nur eben zu abstrusen Zeiten, statt immer um 6:25 Uhr.
    Beispiel:

    Code
    -rw-r----- 1 root root  176 [COLOR='Red']Dec 28 04:23[/COLOR] ***************-access.log.2.gz
    -rw-r----- 1 root root  634 [COLOR='Red']Dec 26 16:54[/COLOR] ***************-access.log.3.gz
    -rw-r----- 1 root root 1005 [COLOR='Red']Dec 26 05:29[/COLOR] ***************-access.log.4.gz
    -rw-r--r-- 1 root root 118K [COLOR='Red']Dec 25 08:08[/COLOR] ***************-access.log.5.gz


    Wie kann das sein? :confused:

  • Moin
    Logrotate wird über cron gestartet. (üblicherweise /etc/cron.daily)


    Wenn dein logrotate zu anderen Zeiten startet, komme 2 Gründe in Frage:


    • Der rechner/cronjob läuft nicht, wenn der cronjob gestartet werden soll und anacron startet den Job dann später
    • Du startest logrotate noch auf anderem Weg (manuell, anderer cronjob)


    Das sagt die man-page dazu:

    Code
    Normally, logrotate is run as a daily cron job.  It will not modify a log  multiple 
    times  in  one day unless the criterium for that log is based on the log’s size and 
    logrotate is being run multiple times each day, or unless the -f or  -force  option 
    is used.
  • Hallo Mordor,


    danke für deine Antwort. Was Du geschrieben hast ist mir bereits klar. Das Script ist inhaltlich identisch mit dem von Default Apache2. Lediglich der Pfad zu den Logs, sowie der Intervall wurden geändert. Cron läuft, denn andere Scripts im Logrotate werden auch korrekt täglich um 6:25 Uhr ausgeführt, z.B. Syslog.
    Damit scheidet der nicht laufende Cronjob aus, weil er bei anderen Logs greift. Manuell wird auch nichts gestartet, sondern es liegt wirklich nur die config für die Rotation unter /etc/logrotate.d. Ich bin echt leicht verwirrt. :eek:

  • Ahoi …


    Hier mal die Inhalte der Dateien, wie sie in /etc/logrotate.d liegen.


    Apache2 (wie vom System angelegt):



    domain-logs (eigene Config für die SysCP Apache Logfiles):


    daily wird täglich um 6:25 Uhr ausgeführt (System Standard). Am Dash im Dateiname dürfte es auch nicht liegen, da in logrotate.d ebenfalls eine config mysql-server liegt, die auch problemlos und pünktlich ausgeführt wird. Das root/root beim create entspricht der SysCP Vorgabe der original Logfiles, im Gegensatz zum root/adm der original Apache Datei. Das dürfte aber ohnehin keinen Einfluss auf diese dubiosen, unregelmäßigen Ausführzeiten haben. Wie oben zu sehen ist werden die Logs ja auch rotiert, nur eben zu willkürlichen Zeiten. :confused:


    Danke für deine Bemühungen. :)

  • Moin


    Bin gestern nicht mehr dazu gekommen zu antworten. Sorry.


    Bei deinem Problem kommen mehrere Eigenheiten zusammen.


    • Dec 25 08:08 *-access.log.5.gz
      Apache schliesst die Logdatei erst, wenn alle Subprozesse beendet wurden. Es kann also vorkommen, das das Logfile erst später geschlossen wird. Neue Logeinträge werden solange in die rotierte Datei geschrieben.
      (deswegen auch das delaycompress in der logrotate.conf)
      Erst wenn alle Prozesse neu gestartet wurden, landen neue Logeinträge in der neue erstellen Logdatei.
    • Dec 26 05:29 *-access.log.4.gz <- Logrotate vom 26.12.10
      Dec 26 16:54 *-access.log.3.gz <- Logrotate vom 27.12.10
      gzip ändert das Dateidatum nicht.
      Die komprimierte Datei behält also das Datum des letzten Schreibvorganges in die Logdatei.


    Die Logeinträge stimmen also.
    Das Logrotate läuft zu den gewünschten Zeiten und die Logfiles werden korrekt rotiert.


    Mordor

  • Du solltest in das Skript

    Code
    apachectl graceful


    einbauen, dann läuft das zeitnaher.


    ... oder nimm einen Server, der das von Haus aus (also ohne cron-job) beherrscht.


    Bebbo