de|en
croncheck¶
Dieser shutdown-hook verhindert das sich der VDR beendet, während gerade cronjobs aktiv sind.
Installation¶
Die Installation erfolgt folgendermaßen.- Folgendes Script export:shutdown-hooks/croncheck/croncheck unter
/usb/bin
speichern und perchmod +x /usr/bin/croncheck
Ausführrechte geben. - Im shutdown-hook Verzeichnis mit
ln -s /usr/bin/croncheck /etc/vdr/shutdown-hooks/S10.croncheck
einen Link auf dieses Script anlegen. - In den zu schützenden cron Part-Verzeichnis Start-/Stoplinks mit
ln -s /usr/bin/croncheck /etc/cron.????/00000_croncheck
undln -s /usr/bin/croncheck /etc/cron.????/zzzzz_croncheck
erstellen.????
ist dabei durchdaily
,hourly
,weekly
odermonthly
zu ersetzen, je nachdem welche Jobs man berücksichtigen möchte. - In Einträgen einer crontab werden Start-/Stopbefehle in der Form
croncheck start|stop <id>
vor und nach dem eigentliche Befehl eingefügt.
So wird z.B. aus# Look for and purge old sessions every 30 minutes 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete
folgendes# Look for and purge old sessions every 30 minutes 09,39 * * * * root croncheck start "php purge"; [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete; croncheck stop "php purge"
Die <id> muss dabei eindeutig sein. - Optional kann noch ein Befehl erzeugt werden, der es ermöglicht den shutdown manuell zu unterbinden. Dazu per
ln -s /usr/bin/croncheck /usr/bin/vdrps
den Befehlvdrps
installieren. - Die Sprachdatei mit
msgfmt -o /usr/share/locale/de_DE/LC_MESSAGES/croncheck.mo ./po/de_DE.po
instalieren. croncheck init
mit root Rechten ausführen- Optional einen Eintrag in die VDR
commands.conf
hinzufügen der es erlaubt den shutdown manuell zu dekativieren.
In dercommands.conf
ist hierfür folgendes einzutragen-Shutdown Kontrolle : /usr/bin/croncheck osdserver
Soll dafür das osdserver Plugin genutzt werden und der osdserver Port weicht vom Default (2010) ab muss der /etc/services folgende Zeile hinzugefügt werden (Also Beispiel für Port 6400)vdr-osdserver 6400/tcp
Funktionsweise¶
In den Part-Verzeichnissen wird 00000_croncheck
aufgrund des Dateinamens als erstes ausgeführt und erstellt in /var/spool/cronceck
eine Flagdatei. zzzzz_croncheck
wird als letzter Job ausgeführt und löscht diese Flagdatei wieder.
In einer crontab hat der start/stop Befehl den selben Effekt.
Der shutdown-hook prüft auf das Vorhandensein dieser Flagdateien in /var/spool/cronceck
und verhindert den shutdown sofern mindestens eine vorhanden ist.
So ist sichergestellt das der shutdown solange verzögert wird, wie noch Jobs aktiv sind.
Zur Sicherheit werden Flagdateien älter als 60 Minuten nicht berücksichtigt. So wird ein hängender Job den VDR nicht unendlich lange aktiv halten.
Mittels vdrps start|stop [<id>]
lässt sich der shutdown manuell unterbinden. Das kann nützlich sein wenn man manuell längere Prozesse anstößt (z.B. ein Kernelbau oder der Upload einer größeren Datei). Die optionale <id>
kann genutzt werden wenn mehrere Prozesse angestoßen werden sollen.
Hierbei findet keine Prüfung auf ein max. alter von 60 Minuten statt. Der VDR wird solange an bleiben bis alle stop Befehle aufgerufen wurden.
Genutzt wird es z.B. folgendermaßenvdrps start "kernel"; make-kpkg kernel_image -j 5; vdrps stop "kernel"
oder, wenn nur ein einzelner Prozess gestartet wirdvdrps start; make-kpkg kernel_image -j 5; vdrps stop
Benötigte Software¶
- Für die Nutzung per
commands.conf
per osdserver Plugin- Das osdserver Plugin
- getservbyname (Beim vom Default (2010) abweichenden Port des osdserver Plugin)
Debian Nutzer können dieses Paket getservbyname_0.1-1_i386.deb nutzen. Nutzer anderer Distributionen können dieses Quellpaket nutzen.
- Für die Nutzung per
commands.conf
per dbus2vdr Plugin- Das dbus2vdr Plugin
- dbus-triggerd in der Version > git commit 749a7a8
Debian Nutzer können dieses Paket dbus-triggerd_0.3.2_git749a7a8-0.1_i386.deb nutzen.