# [solved] Cronjob zur Logdateikomprimierung mit Oktober Bug

## nanos

Hallo,

auf meinem Mailserver lasse ich die Logdateien täglich in eine eigene Datei schreiben.

In einem monatlichen Cronjob komprimiere ich dann die Dateien vom vorigen Monat.

Das funktioniert schon seit Jahren sehr gut, nur das Archiv vom Oktober ist immer leer.

Hier mal das Verzeichnis mit den Dateien:

```
-rw-r--r-- 1 root root  14236363 26. Jun 2010  logs.01.2010.tbz2

-rw-r--r-- 1 root root   6115476 25. Mär 15:59 logs.01.2011.tbz2

-rw-r--r-- 1 root root  16781277 26. Jun 2010  logs.02.2010.tbz2

-rw-r--r-- 1 root root   6541404 25. Mär 15:59 logs.02.2011.tbz2

-rw-r--r-- 1 root root   9872717 26. Jun 2010  logs.03.2010.tbz2

-rw-r--r-- 1 root root   7118269  1. Apr 05:30 logs.03.2011.tbz2

-rw-r--r-- 1 root root  10385230 26. Jun 2010  logs.04.2010.tbz2

-rw-r--r-- 1 root root  13048508 26. Jun 2010  logs.05.2010.tbz2

-rw-r--r-- 1 root root   9473966  1. Jul 2010  logs.06.2010.tbz2

-rw-r--r-- 1 root root  66676722  1. Aug 2010  logs.07.2010.tbz2

-rw-r--r-- 1 root root   9959698  1. Sep 2010  logs.08.2010.tbz2

-rw-r--r-- 1 root root  10657008  1. Okt 2010  logs.09.2010.tbz2

-rw-r--r-- 1 root root        46  1. Nov 05:30 logs.10.2010.tbz2

-rw-r--r-- 1 root root   7872670  1. Dez 05:31 logs.11.2010.tbz2

-rw-r--r-- 1 root root   6567373  1. Jän 05:31 logs.12.2010.tbz2

-rw-r--r-- 1 root root  28600320 25. Mär 16:00 logs.2008.tar

-rw-r--r-- 1 root root 123463680 25. Mär 16:01 logs.2009.tar

-rw-r--r-- 1 root root 175544320 25. Mär 16:02 logs.2010.tar

-rw-r--r-- 1 root root   3138968  2. Apr 01:33 mail.01.04.2011.log

-rw-r--r-- 1 root root   1487782  3. Apr 01:25 mail.02.04.2011.log

-rw-r--r-- 1 root root   1408973  4. Apr 01:50 mail.03.04.2011.log

-rw-r--r-- 1 root root   2944046  5. Apr 01:57 mail.04.04.2011.log

-rw-r--r-- 1 root root   3021425  6. Apr 01:39 mail.05.04.2011.log

-rw-r--r-- 1 root root    842708  6. Apr 09:47 mail.06.04.2011.log

```

Und hier nun die monthly.cron:

```
#!/bin/sh

tar cjf /var/log/mail/logs.$(date --date="1 month ago" +"%m.%Y").tbz2 /var/log/mail/mail.??.$(date --date="1 month ago" +"%m.%Y").log --remove-files

```

Kann mir einer erklären warum hier immer Datein vom Oktober verschwinden?

LG

RolandLast edited by nanos on Mon Apr 11, 2011 11:30 am; edited 1 time in total

----------

## Christian99

lol, klingt ja lustig. also nur wenn man nicht betroffen ist  :Smile: 

ich würde vermuten, dass die täglichen dateien überhaupt nicht angelegt werden. wenn sie da wären und von tar nur nicht gemacht werden, dann könnten sie ja auch nicht gelöscht werden und wären jetzt ja auch noch da. (oder ist dein ls output nicht vollständig?). schau mal eine stufe vorher, ob da was schief geht.

----------

## mv

Vielleicht wird der Cron-Job während der Zeitumstellung gestartet, so dass date dann noch den falschen Monat liefert? (Während des Jobs sind die locales möglicherweise andere als im Cron-Job selbst?)

----------

## nanos

Also die Dateien sind wirklich da, nur wenn der Cronjob am 1. November um ca. 5:00h startet dann wird zwar ein Archiv angelegt und die Dateien gelöscht, aber das Archiv ist leer.

Wenn die Dateien vom tar entfernt werden dann müssten sie ja auch ins Archiv kommen.

Die Zeitumstellung hatte ich auch schon im Verdacht, aber da der Job erst im November ausgeführt wird und die Umstellung eine Woche vorher passiert kann ich mir das nur schwer vorstellen.

----------

## toralf

Ich tippe auch auf ein Zeitzonenproblem. Also solltest Du sowohl die TZ  Variable als auch die Zeitzoneneinstellungen/-files generell überprüfen und das Skript mit 1-2 Debugmeldungen versehen.

Anbei, die Zeitumstellung erfolgt nicht überall am jeweiligen letzten Sonntag. In der Türkei z.B. erfolgt die Umstellung auf die Sommerzeit am darauffolgenden Montag, im mittleren Westen der USA Mitte März, die Russen hören gleich gar nicht mehr auf damit usw. usf.

----------

## nanos

Ich wollte dieses Verhalten in einer Testumgebung reproduzieren, doch leider tritt der Fehler dort willkürlich auf.

Bis jetzt konnte ich noch nicht raus finden warum das manchmal nicht funktioniert.

Die einfachste Lösung für mich ist nun das Entfernen der Daten in einen eigenen Schritt zu packen wo vorher das Archiv überprüft wird.

Im Fall eines Fehlers werden die Dateien dann nicht gelöscht sondern eine Fehlermeldung ausgegeben.

@toralf: Die Zeitzonen Einstellungen werde ich mir auf jeden Fall auch ansehen. Da dieses Problem immer nur im Oktober auftritt wäre das die plausibelste Erklärung.

----------

## mv

 *nanos wrote:*   

> Die einfachste Lösung für mich ist nun das Entfernen der Daten in einen eigenen Schritt zu packen wo vorher das Archiv überprüft wird.

 

Wenn der Cron-Job aufgrund der Zeitumstellung zweimal aufgerufen wird, hast Du das selbe Problem: Der Bug besteht wahrscheinlich nicht darin, dass die Dateien zu früh gelöscht werden, sondern dass das bereits bestehende Archiv möglicherweise überschrieben wird.

Du solltest im Script also eher nachschauen, dass das gepackte Archiv noch nicht existiert, und zugleich testen ob der gewünschte Ordner (noch) existiert. Wenn Du ganz vorsichtig sein willst, solltest Du noch mit lockfiles arbeiten, denn dieser Test bringt natürlich eine race-condition mit sich (ein später gestarteter Job könnte Dein neu erstelltes Archiv überschreiben, weil es zum Zeitpunkt des Tests im neuen Job noch nicht existiert hat).

----------

## toralf

 *mv wrote:*   

> Der Bug besteht wahrscheinlich nicht darin, dass die Dateien zu früh gelöscht werden, sondern dass das bereits bestehende Archiv möglicherweise überschrieben wird.

 Nicht schlecht   :Idea: 

----------

## nanos

Diese Vermutung hört sich absolut plausibel an.

Ich werde den Thread jetzt mal auf gelöst setzen, denn ob der Fehler dann wirklich nicht mehr passiert, sehe ich erst wieder im Oktober.

----------

