# Cron-Job zu spät

## l3u

Hallo!

Ich benutze vixie-cron. Ich hab einen stündlichen Cron-Job (in /etc/cron.hourly). Der wird auch normalerweise um XX.00 Uhr ausgefürt. Manchmal aber auch erst um XX.10 Uhr. Woran liegt das? Bzw. wie mache ich cron klar, daß er den Job um _genau_ XX.00 Uhr ausführen soll?

MfG, Libby

----------

## RealGeizt

Hi!

Probiers mal in die "/etc/crontab" einzutragen

Bsp.: Hier wird die Systemzeit alle Stunde durch den Aachener Timeserver neu synchronisiert.

```
0  *  * * *     root    rdate -s timeserver.rwth-aachen.de
```

Musst halt nur die Aktion tauschen...bei mir wirds stündlich ausgeführt.

Gruss, Christian

----------

## SinoTech

 *RealGeizt wrote:*   

> Hi!
> 
> Probiers mal in die "/etc/crontab" einzutragen
> 
> Bsp.: Hier wird die Systemzeit alle Stunde durch den Aachener Timeserver neu synchronisiert.
> ...

 

Korrekt ist es:

```

0  *  * * *     rdate -s timeserver.rwth-aachen.de

```

Also ohne "root", da vixie-cron die Angabe eines Benutzers nicht unterstützt.

Mfg

Sino

----------

## RealGeizt

 *SinoTech wrote:*   

>  *RealGeizt wrote:*   Hi!
> 
> Probiers mal in die "/etc/crontab" einzutragen
> 
> Bsp.: Hier wird die Systemzeit alle Stunde durch den Aachener Timeserver neu synchronisiert.
> ...

 

mhmm, warum steht es dann so in der crontab?!

```
chris@cKy : 14 files 347Mb $ cat /etc/crontab 

# for vixie cron

#

# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/files/crontab-3.0.1-r4,v 1.6 2004/07/18 04:40:50 dragonheart Exp $

#

#

# Global variables

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

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

0  *  * * *     root    rm -f /var/spool/cron/lastrun/cron.hourly

1  3  * * *     root    rm -f /var/spool/cron/lastrun/cron.daily

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

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

0  *  * * *     root    rdate -s timeserver.rwth-aachen.de
```

----------

## SinoTech

 *RealGeizt wrote:*   

> 
> 
> mhmm, warum steht es dann so in der crontab?!
> 
> ```
> ...

 

Hmm .. ok, evtl. kann man das in "/etc/crontab" doch direkt eintragen. Ich hatte es über "/usr/bin/crontab -e" versucht, und bekam beim ausführen des cron-jobs immer die Fehlermeldung das das Kommando nicht gefunden wurde (Wobei er als Kommando den Usernamen benutzt hat). Von daher dachte ich das vixie-cron das ausführen unter einem bestimmten Benutzernamen nicht unterstützt.

Mfg

Sino

----------

## calvin-gr

in der systemcrontab /etc/crontab ist das angeben eines benutzernames möglich, in der benutzercrontab nicht.

----------

## l3u

Heißt das dann, daß die Crontab-Einträge korrekt und zu einem genauen Zeitpunkt ausgeführt werden, die in /etc/cron.* dagegen nach Belieben?! Bzw. wo ist der Unterschied? Bzw. was kann die Ursache für das zu spät ausgeführte Script sein?

In meiner /etc/crontab steht folgendes:

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

0  *  * * *     root    rm -f /var/spool/cron/lastrun/cron.hourly

1  3  * * *     root    rm -f /var/spool/cron/lastrun/cron.daily

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

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

*/10  *  * * *  root    test -x /usr/sbin/run-crons && /usr/sbin/run-crons
```

Heißt doch, daß cron alle 10 Minuten nachschaut, welche Script in den /etc/cron.*-Verzeichnissen ausgeführt werden sollen. Also ist's doch egal, ob das Script in /etc/cron.hourly oder direkt in /etc/crontab steht. Aber wie kann es dann passieren, daß ein Script 10 Minuten zu spät ausgeführt wird?

----------

## SinoTech

 *Libby wrote:*   

> Heißt das dann, daß die Crontab-Einträge korrekt und zu einem genauen Zeitpunkt ausgeführt werden, die in /etc/cron.* dagegen nach Belieben?! Bzw. wo ist der Unterschied? Bzw. was kann die Ursache für das zu spät ausgeführte Script sein?
> 
> [...]

 

Also bin ja nicht der Fachmann dafür, aber ist es möglich das "/etc/cron.hourly" nicht zu jeder vollen Stunde sondern alle 60 Minuten ausgeführt wird ? Heißt also wenn dein Rechner um 11:30 gestartet wird (und somit auch cron), dann wird "/etc/cron.hourly" um 11:30, 12:30, ... ausgeführt. Steht ja nirgends das es zur vollen Stunde ist, oder ?

Mfg

Sino

----------

## l3u

Also, meine empirische Beobachtung ist die, daß unabhängig von der Einschaltzeit um XX.00 Uhr die Scripts in /etc/cron.hourly ausgeführt werden. Und es ist auch bisher nur manchmal aufgetreten, daß sie eben um XX.10 Uhr ausgeführt werden. Aber nie um XX.43 Uhr oder so. Und ich halte es für eher unwahrscheinlich, daß ich meinen Computer bisher immer minutengenau um XX.00 Uhr oder um XX.10 Uhr hochgefahren habe. Also postuliere ich hiermit, daß faktisch die Scripts in /etc/cron.hourly _an sich_ zur vollen Stunde ausgeführt werden ;-)

----------

## Tobiking

Die Scripte die in dem ordner sind werden ja soweit ich weiß nacheinander ausgeführt. Vielleicht sind in dem ordner noch andere scripte die vielleicht 10 minuten brauchen bis sie fertig sind. Ist vielleicht unwarscheinlich aber soetwas gibt es immer. Ich habe mich schonmal gewundert warum ein Server immer zur vollen stunde nicht richtig reagieren wollte und da waren die irc stats die erstellt wurden schon etwas mehr geworden nach nen paar monaten und da hat das alleine 3-4 Minuten gebraucht.

----------

## l3u

Da sind definitiv keine anderen Scripts drin, weil ich vixie-cron nur deshalb installiert hab, damit er genau dieses eine Script jede Stunde ausführt ... ansonsten tut der gar nix! Außerdem wär's auch hier wieder komisch, wenn die anderen Scripts -- unabhängig von Rechnerlast -- immer _genau_ 10 Minuten brauchen würden ...

Die Zeile

```
*/10  *  * * *  root    test -x /usr/sbin/run-crons && /usr/sbin/run-crons
```

sagt doch, daß cron alle 10 Minuten die Jobs ausfüren soll, die in den o.g. Verzeichnissen auszuführen sind. Eigentlich müßte doch hier irgendwie der Fehler zu suchen sein, oder?

/usr/sbin/run-crons:

```
# this script looks into /etc/cron.[hourly|daily|weekly|monthly]

# for scripts to be executed. The info about last run is stored in

# /var/spool/cron/lastrun
```

----------

## benjamin200

An meinem Server kann ich dies auch nachvollziehen, hin und wieder werden Scripts um XX.00 und XX:15 ausgeführt. Bin dem bis jetzt noch nicht genauer auf den Grund gegangen aber hoffe in diesem Thread demnächst die Lösung zu finden  :Smile: 

Gruß,

Benjamin

----------

## platinumviper

Warum richtest Du nicht einfach einen ganz normalen Cron-Job ein?

platinumviper

----------

## l3u

Es dürfte doch aber _eigentlich_ keinen Unterschied machen, oder?

----------

## platinumviper

 *Libby wrote:*   

> Es dürfte doch aber _eigentlich_ keinen Unterschied machen, oder?

 

Normale Cron-Jobs werden zu einem exakt festgelegten Zeitpunkt ausgeführt, bei den Scripten in /etc/cron.{hourly,daily,weekly,monthly} ist der exakte Zeitpunkt nicht wichtig, es kommt auf die Häufigkeit an.

Treten Deine Probleme an bestimmtem Tagen oder zu bestimmten Stunden auf?

Sieh mal mit ls cron.{hourly,daily,weekly,monthly} nach ob nicht doch einige Scripte installiert sind.

platinumviper

----------

## l3u

In den /etc/cron.*-Verzeichnissen ist _wirklich_ nur das eine Script drin! Ich hab bisher keine Regelmäßigkeit rausgefunden, wann die Verzögerung auftritt.

Ich hatte eigentlich gedacht, daß diese Verzeichnisse eine Vereinfachung für ein und denselben Job sein sollen ...

----------

## benjamin200

 *Quote:*   

> 
> 
> In den /etc/cron.*-Verzeichnissen ist _wirklich_ nur das eine Script drin! Ich hab bisher keine Regelmäßigkeit rausgefunden, wann die Verzögerung auftritt. 
> 
> Ich hatte eigentlich gedacht, daß diese Verzeichnisse eine Vereinfachung für ein und denselben Job sein sollen ...
> ...

 

Genau deswegen hast du ja die Unregemäßigkeit:

 *Quote:*   

> 
> 
> bei den Scripten in /etc/cron.{hourly,daily,weekly,monthly} ist der exakte Zeitpunkt nicht wichtig, es kommt auf die Häufigkeit an. 
> 
> Treten Deine Probleme an bestimmtem Tagen oder zu bestimmten Stunden auf? 
> ...

 

Aber nun stellt sich für mich die Frage, wie lege ich einen ganz normalen Cron Job an, der zu dem exakt definierten Zeitpunkt abläuft?

Gruß,

Benjamin

----------

## Genone

Schon mal jemand hier auf die Idee gekommen, sich einfach mal das (relativ kurze) run-crons Skript anzusehen?  :Wink: 

----------

## benjamin200

 *Quote:*   

> 
> 
> Schon mal jemand hier auf die Idee gekommen, sich einfach mal das (relativ kurze) run-crons Skript anzusehen?
> 
> 

 

Ja, aber habe bist jetzt immer die "cron.{hourly,daily,weekly,monthly" Verzeichnisse verwendet. Wie läuft das per "NORMALEN" Cron-Skript? Hast du ein kurzes Beispiel mit Hinweis auf die anzupassenden Konfigurations bzw. Script-Datei?

Schonmal Danke  :Smile: 

Gruß,

Benjamin

----------

## Genone

 *benjamin200 wrote:*   

>  *Quote:*   
> 
> Schon mal jemand hier auf die Idee gekommen, sich einfach mal das (relativ kurze) run-crons Skript anzusehen?
> 
>  
> ...

 

Versteh ich leider nicht ganz die Frage ...

Ist `man 5 crontab` evtl. eine Hilfe?

----------

## benjamin200

 *Quote:*   

> 
> 
> Versteh ich leider nicht ganz die Frage ... 
> 
> 

 

Wie ist das vorgehen um exakt um 00:00, und das jeden Tag, ein Script ablaufen zu lassen?

 *Quote:*   

> 
> 
> Ist `man 5 crontab` evtl. eine Hilfe?
> 
> 

 

Nein.

```

man 5 crontab

No entry for crontab in section 5 of the manual

```

----------

## calvin-gr

ich würde mal diese zeile

```

0  *  * * *     root    rm -f /var/spool/cron/lastrun/cron.hourly 

```

in /etc/crontab so umändern:

```

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

```

Ich denke dann sollte es wie gewünscht funktionieren.

run-crons schaut nämlich nach ob /var/spool/cron/lastrun/cron.hourly existiert. wenn nicht werden die scripte in /etc/cron.hourly ausgeführt.

@benjamin200:

um ein script jeden tag um 0 Uhr laufen zu lassen für diese zeile in /etc/crontab ein:

```

0 0 * * * root /pfad/zum/script

```

----------

## Genone

 *benjamin200 wrote:*   

>  *Quote:*   
> 
> Versteh ich leider nicht ganz die Frage ... 
> 
>  
> ...

 

Ups, hab da wohl was durcheinandergebracht, sollte nur `man crontab` sein. Und das sollte dein Problem eigentlich lösen.

----------

## calvin-gr

 *Genone wrote:*   

> 
> 
> Ups, hab da wohl was durcheinandergebracht, sollte nur `man crontab` sein. Und das sollte dein Problem eigentlich lösen.

 

In "man crontab" wird der crontab-befehl beschrieben, in "man 5 crontab" der aufbau einer crontab-datei.

also sollte "man 5 crontab" doch das richtige sein.

----------

## Genone

 *calvin-gr wrote:*   

>  *Genone wrote:*   
> 
> Ups, hab da wohl was durcheinandergebracht, sollte nur `man crontab` sein. Und das sollte dein Problem eigentlich lösen. 
> 
> In "man crontab" wird der crontab-befehl beschrieben, in "man 5 crontab" der aufbau einer crontab-datei.
> ...

 

Oh mann, sieht so aus als ob es sogar 3 crontab manpages gibt:

in 1 und 5, von vixie-cron installiert (k.A. wie das bei anderen cron Daemons aussieht)

in 1p, von man-pages installiert.

Sowohl die in 5 als auch die 1p erklären den Aufbau einer crontab Datei.

----------

## l3u

 *Genone wrote:*   

> Schon mal jemand hier auf die Idee gekommen, sich einfach mal das (relativ kurze) run-crons Skript anzusehen?

 

Das war eigentlich mit das erste, was ich gemacht habe ... aber trotz Ansehen verstehe ich nicht, wie es zu der Verspätung kommen kann ... schließlich wird das Script doch alle 10 Minuten ausgeführt, und schaut dann nach, was zu tun ist, oder? Warum führt es dann manchmal den Inhalt von /etc/cron.hourly 10 Minuten später aus, als es das normalerweise macht?

----------

## calvin-gr

wenn das script bevor "rm -f /var/spool/cron/lastrun/cron.hourly" gelaufen ist überprüft ob /var/spool/cron/lastrun/cron.hourly noch existiert führt es den inhalt von /etc/cron.hourly nicht aus. immer wenn dies vorkommt wird /etc/cron.hourly erst um *.10 Uhr ausgeführt. abhilfe sollte mein vorheriges post geben.

----------

## amne

/etc/cron.daily wird auch ausgeführt, wenn der Rechner (Standard Desktopsystem) in der Nacht um die Zeit wo es laufen hätte sollen abgeschaltet war. Das ist die Hauptidee dahinter. Rechner ein, Cronjob fällig, Cronjob wird ausgeführt. Es gibt also absolut keine Garantie, dass der Job zu einer bestimmten Zeit ausgeführt wird, besonders wenn er schon überfällig ist. Andererseits gibt es die klassische Crontab. Wenn der Rechner dann nicht an war - Pech gehabt.

----------

## benjamin200

 *Quote:*   

> 
> 
> Andererseits gibt es die klassische Crontab. Wenn der Rechner dann nicht an war - Pech gehab
> 
> 

 

Hi amne,

ok das hier ist meine Crontab:

```

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

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

0  3  * * *      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

```

Was muss ich hier reinschieben und z.B. einen Binary, nennen wir sie "test" und sie liegt auf "/opt/meine_scripts/test liegt. Diese soll immer Punkt 00:00 jeden Tag ausgeführt wreden, auch wenn der Rechner aus ist. Danke im voraus.

Gruß,

Benjamin

----------

## calvin-gr

hallo benjamin200,

falls du es noch nicht mirgekriegt hast, auf deine frage habe ich dir schon bei einem vorherigen post von mir geantwortet.

----------

## psyqil

 *benjamin200 wrote:*   

> Diese soll immer Punkt 00:00 jeden Tag ausgeführt wreden, auch wenn der Rechner aus ist.

 Ääähhh... Magie? Oder doch sys-process/anacron?

----------

## platinumviper

 *benjamin200 wrote:*   

> Aber nun stellt sich für mich die Frage, wie lege ich einen ganz normalen Cron Job an, der zu dem exakt definierten Zeitpunkt abläuft?

 

```
crontab -e
```

und dann Einträge anlegen wie in man 5  crontab beschrieben, z.B.:

```
59 23 * * *     sleep 52;/usr/sbin/adsl-stop;sleep 10;/usr/sbin/adsl-start
```

Cronjobs dürfen nur von Usern angelegt werden, die Mitglied der Gruppe cron sind.

platinumviper

----------

## l3u

Okay. Jetzt schnall ich wenigstens, was abgeht.

----------

## benjamin200

Die cron-jobs wollen bei mir einfach nicht per /etc/crontab laufen. Bis dato habe ich meine Skripts immer über die Verzeichnisse hourly, daily, weekly und monthly ausführen lassen. Speziell möchte ich "/etc/logcheck/logcheck.sh" per crontab ausführen, so das es immer zu einem festgelegten Zeitpunkt ausgeführt wird.

Meine crontab (drcon):

```

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

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

0  3  * * *      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

23 * * * * *     root /etc/logcheck/logcheck.sh

```

"23 * * * * *" würde bedeuten, dass das Skript logcheck.sh 23 Minuten nach jeder vollen Stunde ausgeführt wird. Aber das funktioniert leider nicht. Wenn ich per Konsole das Skript ausführe funktioniert es wunderbar. Was mache ich falsch? Kann es an dcron liegen?

Gruß,

Benjamin

----------

## benjamin200

 *Quote:*   

> 
> 
> Die cron-jobs wollen bei mir einfach nicht per /etc/crontab laufen. Bis dato habe ich meine Skripts immer über die Verzeichnisse hourly, daily, weekly und monthly ausführen lassen. Speziell möchte ich "/etc/logcheck/logcheck.sh" per crontab ausführen, so das es immer zu einem festgelegten Zeitpunkt ausgeführt wird.
> 
> Meine crontab (drcon):
> ...

 

```

# fcron || dcron:

# This is NOT the system crontab! fcron and dcron do not support a system crontab.

# to get /etc/cron.{hourly|daily|weekly|montly} working with fcron or dcron do

# crontab /etc/crontab

# as root.

# NOTE: This will REPLACE root's current crontab!!

```

Unterstützt dcron die Funktion etwa garnicht ?

Gruß

Benjamin

----------

## benjamin200

FEHLER GEFUNDEN:

Es liegt an /etc/crontab und "crontab -e". Hab hier mal aufgeräumt und alles per "crontab -e" angepasst. Siehe da es läuft. Bin jetzt von dcron auf vixie-cron umgestiegen, wobei es auch mit dcron funktionieren muss  :Smile: 

Gruß

Benjamin

----------

