# Dcron Zeitverzug

## Hollowman

Hi

Ich hab ma ein kleines Problem. Ich hab 2 Server auf denen ein dcron läuft. Der soll um 23:40 jede Nacht die Daily Jobs erledigen.

Jetzt hab ich aber das Problem das laut Cron.log der Daily Job um 23:40 gestartet wird, aber die Jobs erst um ca 00:10 laufen.

Woran kann das liegen?

Crontab:

```
# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly

*/15 * * * *     test -x /usr/sbin/run-crons && /usr/sbin/run-crons

59  *  * * *      rm -f /var/spool/cron/lastrun/cron.hourly

40 23  * * *      rm -f /var/spool/cron/lastrun/cron.daily

15 4  * * 6      rm -f /var/spool/cron/lastrun/cron.weekly

30 5  1 * *      rm -f /var/spool/cron/lastrun/cron.monthly

```

cron.log:

```
05-Jun-09 23:30  FILE /var/spool/cron/crontabs/root USER root pid 20636 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

05-Jun-09 23:40  FILE /var/spool/cron/crontabs/root USER root pid 21615 cmd rm -f /var/spool/cron/lastrun/cron.daily

05-Jun-09 23:45  FILE /var/spool/cron/crontabs/root USER root pid 22012 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

05-Jun-09 23:59  FILE /var/spool/cron/crontabs/root USER root pid 23014 cmd rm -f /var/spool/cron/lastrun/cron.hourly

06-Jun-09 00:00  FILE /var/spool/cron/crontabs/root USER root pid 23064 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

06-Jun-09 00:15  FILE /var/spool/cron/crontabs/root USER root pid 24956 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

06-Jun-09 00:30  FILE /var/spool/cron/crontabs/root USER root pid 26179 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

```

Log Datei der Scripte. Die machen wenn sie aufgerufen werden einfach nen echo mit Name und Datum:

```
Sa 6. Jun 00:10:17 CEST 2009 dccd

Sa 6. Jun 00:10:33 CEST 2009 logrotate

Sa 6. Jun 00:10:57 CEST 2009 manpages

Sa 6. Jun 00:10:59 CEST 2009 slocate

```

Mir wäre halt wichtig das der logrotate Job so nah wie möglich an 23:59 läuft und halt nich erst am nächsten Tag.

Ich dachte zuerst das der dccd lange braucht, weil der ne Menge Files löschen muss, aber der läuft ja auch erst um 00:10 an. Das komische ist auch das es manchmal klappt das sie um ca 23:40 laufen und manchmal erst ca 30 Minuten später.

Die Jobs die direkt in der crontab stehen führt er pünktlich aus.

Der Virus Job steht um 23:20 in der crontab.

```
05-Jun-09 23:15  FILE /var/spool/cron/crontabs/root USER root pid 19318 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

05-Jun-09 23:20  FILE /var/spool/cron/crontabs/root USER root pid 19860 cmd /usr/local/bin/do.virus-stat >>/var/log/MailScanner/Virus-activity.log

05-Jun-09 23:30  FILE /var/spool/cron/crontabs/root USER root pid 20636 cmd test -x /usr/sbin/run-crons && /usr/sbin/run-crons

```

Ich hoffe da gibts ne Lösung für. Falls ihr noch irgendwelche Daten braucht sagt Bescheid.

Sebastian

----------

## Hollowman

Hi

Kann da keiner was zu sagen?

Sebastian

----------

## Child_of_Sun_24

Naja wenn er fast immer eine halbe Stunde verzögert, warum startest du sie dann nicht per default eine halbe Stunde eher ?

Wenn es dann immer noch passiert liegt es an etwass anderem.

CoS

----------

## manuels

Ein bisschen Schildbuergerisch die Loesung, aber versuchen kannste es ja mal echt.

----------

## Child_of_Sun_24

Hauptsächlich geht es mir darum ob er sie dann immer noch um 0:10 Startet, denn wenn ja ist irgendwo noch eine versteckte Zeitangabe, oder sogar ein dafeult Wert gesetzt den man dann entsprechend ändern könnte.

CoS24

----------

## Hollowman

Hi

Das ist ja mein Problem. Mit immer ner halben Stunde könnte ich ja leben. Aber der macht das wie er will. Ma ne halbe Stunde, ma 10 Minuten, ma pünktlich. Ich poste morgen nochma das Logfile der letzten Tage.

Sebastian

----------

## Child_of_Sun_24

Vielleicht Probierst du es einfach nochmal mit nem anderen Cron, wie vixie-cron oder anacron.

Kann auch ein Fehler bei dcron sein.

CoS

----------

## Hollowman

Hi

Ich hab jetzt auf dem TestServer (der die Probleme auch hat) den dcron runter geschmissen und den Vixie Installiert. Ma sehen was der macht.

Sebastian

----------

## Hollowman

Hi

Also ich hab die Probleme immer noch. Hier ma ein Beispiel

```

26. Mär 15:12 exim/mainlog

24. Feb 00:02 exim/mainlog-20100224.gz

25. Feb 23:51 exim/mainlog-20100225.gz

26. Feb 23:40 exim/mainlog-20100226.gz

27. Feb 23:40 exim/mainlog-20100227.gz

28. Feb 23:48 exim/mainlog-20100228.gz

2. Mär 00:01 exim/mainlog-20100302.gz

4. Mär 00:05 exim/mainlog-20100304.gz

5. Mär 00:21 exim/mainlog-20100305.gz

6. Mär 23:40 exim/mainlog-20100306.gz

7. Mär 23:54 exim/mainlog-20100307.gz

9. Mär 00:11 exim/mainlog-20100309.gz

11. Mär 00:03 exim/mainlog-20100311.gz

12. Mär 23:48 exim/mainlog-20100312.gz

14. Mär 00:07 exim/mainlog-20100314.gz

15. Mär 23:40 exim/mainlog-20100315.gz

16. Mär 23:40 exim/mainlog-20100316.gz

17. Mär 23:45 exim/mainlog-20100317.gz

19. Mär 00:11 exim/mainlog-20100319.gz

20. Mär 00:15 exim/mainlog-20100320.gz

21. Mär 23:40 exim/mainlog-20100321.gz

23. Mär 00:20 exim/mainlog-20100323.gz

25. Mär 00:14 exim/mainlog-20100325.gz

```

Es muss doch möglich sein, das es immer zur selben Zeit passiert und nicht immer wann anders.

Sebastian

----------

## mv

Wie kommst Du darauf, dass bei Deiner cron-tab der Job um 23:40 Uhr gestartet werden soll?

Was um 23:40 Uhr passiert, ist doch nur, dass die cron.daily-Datei gelöscht wird.

Dadurch weiss dann der run-crons job, der um 23:45 Uhr gestartet wird, dass er dann beginnen wird,

die Scripte in /etc/cron.daily abzuarbeiten. Falls zu diesem Zeitpunkt ein vorheriger run-crons job noch nicht

beendet ist (also etwa derjenige, der um 23:30 gestartet wurde und möglicherweise gerade cron.weekly

abarbeitet), wird run-crons aufgeben und erst beim nächsten Aufruf (00:00 Uhr) damit anfangen.

Danach wird der run-crons job ganz brav beginnen, die Directories abzuarbeiten: Falls es der um

23:45 nicht geschafft hatte, ist um 00:00 Uhr auch bereits die Datei cron.hourly gelöscht, so dass

der um 00:00 Uhr gestartete cron-job also zunächst /etc/cron.hourly abarbeiten wird, bevor

schließlich /etc/cron.daily an die Reihe kommt. Innerhalb der Directories geht run-crons alphabetisch vor.

Da die einzelnen Jobs i.a. verschieden lange brauchen, kann es dann auch verschieden lange brauchen,

bis Dein logrotate dran ist.

Abhilfe: /etc/cron.daily/logrotate in etwas umbenennen, was alphabetisch eher da ist, und

ev. den cron-weekly job eine Viertelstunde vorverlegen.

Oder noch besser, den job direct in crontab eintragen: Dafür ist dieses Teil ja schließlich da;

der run-crons-Mechanismus soll ja nur eine statistisch langfristig korrekte Häufigkeit der

Aufrufe sichern und ist bei permanent laufenden Rechnern eher witzlos.

----------

## Hollowman

@ mv

Das ist ma ne Super Erklärung. Das hilft mir sehr weiter.

 *Quote:*   

> Abhilfe: /etc/cron.daily/logrotate in etwas umbenennen, was alphabetisch eher da ist, und
> 
> ev. den cron-weekly job eine Viertelstunde vorverlegen.
> 
> Oder noch besser, den job direct in crontab eintragen: Dafür ist dieses Teil ja schließlich da;
> ...

 

Das wollte ich eigentlich vermeiden. Ich bin nicht der einzige der diese Rechner betreut. Wenn dann einer ein update macht gibts das logrotate 2 mal. Das ist dann auch doof. Ich werde mir das mit den Zeiten von der Löschung mal genauer ansehen und den Daily Job vor alle anderen laufen lassen.

Dank dir

Sebastian

----------

## Necoro

Du könntest doch dein logrotate normal in die crontab eintragen ... und das /etc/cron.daily/logrotate durch eine Datei mit nur einem Kommentar "Logrotate steht direkt in der crontab, weil XY" ersetzen

----------

