staging.inyokaproject.org

awk und Crontab Eintrag

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

ascotlx

Anmeldungsdatum:
16. Juli 2019

Beiträge: Zähle...

Hallo zusammen, ich bräuchte bei einer Anforderung ein wenig Schützenhilfe.

Ein Crontab Eintrag der von mir in einem Script ausgelesen wurde sieht wie folgt aus:

1
30   18   *   *   *   /pfad/bin/script.sh

und durch eine awk Zeile wird daraus Naechster Skriptlauf geplant: 18:30 Uhr

Den awk Befehl erspare ich euch mal 😉

Bis hier hin ist alles gut. Nun wurde die Zeile aber erweitert

1
30   18   *   *   5   /pfad/bin/script.sh

und ich möchte nun die Ausgabe wie folgt anpassen: Naechster Skriptlauf geplant: Freitags 18:30 Uhr

Wäre natürlich super wenn die anderen cron Parameter auch berücksichtigt werden.

Zur Erklärung: es geht mir nicht um ein fertiges Script, welches mir den String auseinander nimmt. Vielmehr interessiert es mich, ob es mit einem AWK Script geht und da habe ich schon einiges erfolglos probiert. Aber ich dachte mir "fragen kostet nix"

Wenn jemand mir helfen könnte oder eine Idee hat in welche Richtung es geht .. "immer her damit", auch ein klares Wort "nimm ein Skript" kann ich nachvollziehen 😉

Im voraus schon mal besten Dank

Prof._Frink

Anmeldungsdatum:
29. Mai 2010

Beiträge: 1096

Hi,

also, wenn ich das jetzt richtig verstanden habe, willst du irgendwie die Crontab parsen und in einen String der Form "Naechster Skriptlauf geplant: Freitags 18:30 Uhr" umwandeln. Da das Skript ja sowieso immer nur, Freitags um 18.30 Uhr ausgeführt wird, würde eigentlich ein einfaches

1
echo "Naechster Skriptlauf geplant: Freitags 18:30 Uhr"

reichen (das gilt auch für das erste Beispiel, awk braucht man da nicht, wenn man die Crontab sowieso nicht mehr verändert). Wenn die Crontab dann aber später verändert wird, ist die Ausgabe dann natürlich falsch, dann könnte man versuchen das Ganze mit AWK zu interpretieren. Dann muss man aber auch Regeln definieren, wie etwa Anweisungen wie */10 zu interpretieren sind, das ist relativ kompliziert. Ich würde dir einfach das echo empfehlen, wenn du jetzt nicht laufend die Ausführzeiten änderst und wenn du es hin und wieder doch tust, kannst du ja auch kurz das echo anpassen.

Viele Grüße,

Frink

Prof._Frink

Anmeldungsdatum:
29. Mai 2010

Beiträge: 1096

Ah, okay, es gibt auch eine Python-Bibliothek dafür.

Installation:

1
pip3 install crontab

Das Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/python3                                                                                                                                             
from crontab import CronTab
import datetime

entry = CronTab('30   18   *   *   5')
now = datetime.datetime.now()
dt = entry.next(now,default_utc=True)
now = now - datetime.datetime(1970,1,1)
date = now.total_seconds() + dt
print(datetime.datetime.utcfromtimestamp(date).strftime('Nächster Skriptlauf geplant: %A %H:%M Uhr'))

Aufruf + Ausgabe:

$ python3 cronparse.py 
Nächster Skriptlauf geplant: Friday 18:30 Uhr  

Viele Grüße,

Frink

ascotlx

(Themenstarter)

Anmeldungsdatum:
16. Juli 2019

Beiträge: 3

Hallo Prof._Fink,

besten Dank für den Python Hinweis. Bin jetzt nicht Sattelfest in diesem Thema, aber da hab ich was für meine ToDo List. 😇

Einfach die Ausgabe fest zu verdrahten mag ich nicht, da ich nie weiß ob bei einer Änderung der kleine Merkel im Hirn anspringt und ACHTUNG ruft. ich hab das ganze erstmal mit einem Skript gelöst. Der AWK schien mir zu "kompliziert". 🙄

Besten Dank an alle 😀

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Wenn du das statt mit Cron mit systemd/Timer Units löst, kannst du dir das Ausführungsdatum mit

systemctl list-timers 

anzeigen lassen. Wenn dich nur ein einzelner Timer interessiert, kannst du dessen Namen noch anhängen, also z.B.

$ systemctl list-timers logrotate.timer
NEXT                          LEFT    LAST                          PASSED  UNIT            ACTIVATES
Thu 2019-07-18 00:00:00 CEST  9h left Wed 2019-07-17 00:00:06 CEST  14h ago logrotate.timer logrotate.service 

Systemd bietet auch die Möglichkeit die Ausführungszeitpunkte als Datum anzugeben, so dass man da nicht wie bei Cron groß über die Bedeutung der Felder nachdenken muss, sondern das direkt lesbar hinschreiben kann: https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events.

ascotlx

(Themenstarter)

Anmeldungsdatum:
16. Juli 2019

Beiträge: 3

wie cool ist das denn ?? 😎 Da wird man alt und grau und dann kommt sowas um die Ecke 😀 thx

Antworten |