Cronjob unter Plesk/Debian/Linux funktioniert nicht – so geht’s jede Minute/Sekunde

Cronjob unter Plesk/Debian/Linux funktioniert nicht – so geht’s jede Minute/Sekunde

Ihr habt mit

crontab -e

einen neuen (minütlich ausgeführten) Cronjob hinzugefügt, jedoch wird der Cronjob nicht ausgeführt?

Hier kann sich manchmal ein Fehler einschleichen, wenn Ihr das „/home“ Verzeichnis benutzt. Dieses Verzeichnis wird nämlich je nach Benutzer auch unter „/root“ gemapt. Dementsprechend solltet Ihr Eure Skripte nicht im „/home“ Verzeichnis ablegen, sondern eben unter einem anderen Ordner und dann in Eurem Crontab hierauf verweisen.

Zusätzlich solltet Ihr in die erste Zeile Eures Shellskripts

#!/bin/bash

schreiben.

Auch kann es manchmal nützlich sein die Ausgabe in ein Logfile umzuleiten, anbei ein Beispiel zur Ausführung eines Shellskripts mit Logfile…

Crontab-Beispiele

Jede Minute:

*/1 * * * * /root/test.sh >> /root/test.log 2>&1

Jede Stunde zu Minute 0:

0 * * * * /root/test.sh >> /root/test.log 2>&1

Jeden Tag um 0 Uhr:

0 0 * * * /root/test.sh >> /root/test.log 2>&1

Jeden Monat am ersten Tag um 0 Uhr:

0 0 1 * * /root/test.sh >> /root/test.log 2>&1

Jeden Montag pro Woche um 0 Uhr:

0 0 * * 1 /root/test.sh >> /root/test.log 2>&1

Ihr wollt kein Logfile? Dann ersetzt einfach

>> /root/test.log 2>&1

mit

> /dev/null 2>&1

Cronjob jede Sekunde ausführen

Es ist nicht vorgesehen jede Sekunde einen Cronjob auszuführen, demnach benötigt Ihr hier einen Workaround. Ein solcher Workaround könnte z. B. das Anlegen von 60 gleichen Cronjobs sein die alle mit einer Zeitverzögerung ausgeführt werden.

*/1 * * * * /root/second/0.sh >> /root/test.log 2>&1
*/1 * * * * /root/second/1.sh >> /root/test.log 2>&1
*/1 * * * * /root/second/2.sh >> /root/test.log 2>&1
*/1 * * * * /root/second/3.sh >> /root/test.log 2>&1
*/1 * * * * /root/second/4.sh >> /root/test.log 2>&1
...

In 0.sh würdet Ihr dann oben einfügen:

#!/bin/bash
wait 0
/root/second/run.sh

In 1.sh würdet Ihr dann oben einfügen:

#!/bin/bash
wait 1
/root/second/run.sh

In 2.sh würdet Ihr dann oben einfügen:

#!/bin/bash
wait 2
/root/second/run.sh

Endlosschleife

Eine Alternative hierzu wäre es anstatt eines Cronjobs am Ende des Shellskripts, das gleiche Shellskripts erneut aufzurufen und damit eine Endlosschleife zu erzeugen. Natürlich sollte das nicht als Cronjob ausgeführt werden, sondern unter einer Screen-Sitzung. Denn ansonsten hättet Ihr irgendwann eine große Anzahl von endlos ausgeführten Skripten. Anbei ein Beispiel zum Start einer Screen-Session

screen -mdS Endlos /root/endlosschleife.sh

Auch könnte es empfehlenswert sein eine kleine Verzögerung mit

wait 1

in das Shellskript einzubauen.

Schleife innerhalb 1 Minute

Eine weitere Alternative wäre es eine Schleife innerhalb einer Minute durchlaufen zu lassen. Wobei jeweils mind 1. Sekunde Abstand gehalten werden soll:

#! /bin/bash
end=$((SECONDS+58))

while [ $SECONDS -lt $end ]; do
    # eigentliches Skript
sleep 1
    :
done

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert