• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

crontab @monthly - wenn Computer runtergefahren war

Hallo,

ich weiß dass "normale" cronjobs nicht nachgeholt werden wenn die Zeit in der Crontab verpasst wurde weil der Computer z.B. unten war. Ich dachte aber auf openSuse gäbe es die Erweiterung dass jobs mit @monthly dass dann einfach nachholen. Das scheint nicht zu funktionieren. Ich dachte sogar ich hätte es früher sogar mal am laufen gehabt auf einem alten Rechner. Habe ich das geträumt? Gibt es einen Trick?

Danke!
 

panamajo

Guru
klaus-dieter schrieb:
ich weiß dass "normale" cronjobs nicht nachgeholt werden wenn die Zeit in der Crontab verpasst wurde weil der Computer z.B. unten war. Ich dachte aber auf openSuse gäbe es die Erweiterung dass jobs mit @monthly dass dann einfach nachholen. Das scheint nicht zu funktionieren. Ich dachte sogar ich hätte es früher sogar mal am laufen gehabt auf einem alten Rechner. Habe ich das geträumt? Gibt es einen Trick?
Code:
man 5 crontab
Code:
EXTENSIONS
       These special time specification "nicknames" which replace the 5 initial time and date fields,  and  are  pre-
       fixed with the '@' character, are supported:

       @reboot    :    Run once after reboot.
       @yearly    :    Run once a year, ie.  "0 0 1 1 *".
       @annually  :    Run once a year, ie.  "0 0 1 1 *".
       @monthly   :    Run once a month, ie. "0 0 1 * *".
       @weekly    :    Run once a week, ie.  "0 0 * * 0".
       @daily     :    Run once a day, ie.   "0 0 * * *".
       @hourly    :    Run once an hour, ie. "0 * * * *".
Sollte also gehen...
 
OP
K

klaus-dieter

Hacker
"Sollte" das bestätigt dann ja schon mal dass ich nicht so falsch liege :)

Aber was kann es sein wenn es nicht geht?

Code:
server:~ # crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.57L5vo installed on Sat Jul 11 08:08:16 2015)
# (Cronie version 4.2)
@reboot /usr/local/bin/mirror.sh
@monthly /usr/local/bin/mirrorroll.sh
@reboot /usr/local/bin/convert.sh
server:~ #
 

revealed

Guru
Ich glaube die Befehle @monthly usw sind cron der benutzer.
Und die anderen also die in /etc/crond.dxyz sind system cronjobs.

Und ich bin mir über die Richtigkeit nicht ganz sicher bei der Aussage aber ich meine gelesen zu haben, dass der systemcron jetzt irgendwie mit systemd arbeitet. Das heisst dann denke ich dass diese system jobs jetzt mit systemctl ansteuerbar sind.

Prüfe doch mal: /var/spool/cron/lastrun auf die 0 Byte Datei den Merker "cron.monthly".
Und falls dort schon ein Flag ein file mit "monthly" abgelegt ist. Ist der letzte Vorgang "monthly" schon ausgeführt worden und wird deshalb nicht getriggert.

Wenn dort kein File liegt, steht dessen Ausführung noch im raum. Du siehst hier wann das sein wird:
Code:
cat /etc/crontab
Also zu dieser zeit wird geprüft ob noch cronjobs ausstehen. Es werden genannte obrige flags geprüft. Das sind eben jene "system" crons aus /etc/cron.daily usw....

Falls du dich im Fehlerfall befinden solltest kannst ihn dann manuell triggern mit:
Code:
cd /usr/lib/cron/
./run-crons <- das absetzen des Befehls musst eventuell so anpassen dass du den computer verlassen kannst ohne warten zu müssen, bis alle jobs erledigt sind. Bei der genauen Syntax für diesen Befehl bin ich mir nicht sicher deswegen hier kein code tag von mir und eine Warnung.

Du möchtest diese Datei eventuell auch kurz mit less oder so öffnen und die ersten paar Kommentare lesen. Dort steht das drin.
Code:
less /usr/lib/cron/run-crons
Und das hier sollte "active (running)" in der Ausgabe beinhalten:
Code:
systemctl status cron.service

Hoffe das hilft.

Gruß,

R

PS.: Ich kenne mich wie gesagt nicht all zu genau aus, aber ich meine etwas gelesen zu haben dass die crons der Benutzer irgendwie via anachron erledigt werden können nach einem ähnlichen Prinzip. Wie genau das stattfindet und ob dazu konfiguration notwendig ist, und wie und überhaupt weiss ich nicht.

Aber wenn deine Scripte die du als @daily @monthly usw in der root crontab angelegt hast auch als "system" benutzer ausführbar sind. D.h. keine besondere root oder adminberechtigung benötigen, wäre es besser du kopierst die entsprechenden scripte in die dafür vorgesehen struktur.
- /etc/cron.daily
- /etc/cron.monthly
- usw.

Das schreibe ich dir aus dem Grund, weil ich beispielsweise selbst einen solchigen script im Einsatz habe dessen ausführung nur als root möglich ist.

Diesen starte ich aber in einem solchen fall unter Aufsicht als Verwalter dieses Systemes händisch selbst. Aber man kann sich überlegen wie man soetwas dennoch automatisieren kann in dem falle. Und zwar indem man seinen script verträglich macht. Oder den anderen weg halt geht und sich mit anachron oder dgl. auseinandersetzt.
 
Oben