Nächste: Log-Rotation, Vorige: Basisdienste, Nach oben: Dienste [Inhalt][Index]
Das Modul (gnu services mcron)
enthält eine Schnittstelle zu
GNU mcron, einem Daemon, der gemäß einem vorher festgelegten Zeitplan
Aufträge (sogenannte „Jobs“) ausführt (siehe GNU mcron). GNU mcron ist ähnlich zum traditionellen
cron
-Daemon aus Unix; der größte Unterschied ist, dass mcron in
Guile Scheme implementiert ist, wodurch einem viel Flexibilität bei der
Spezifikation von Aufträgen und ihren Aktionen offen steht.
Das folgende Beispiel definiert ein Betriebssystem, das täglich die Befehle
updatedb
(siehe Invoking updatedb in Finding Files)
und guix gc
(siehe guix gc
aufrufen) ausführt sowie den
Befehl mkid
im Namen eines „unprivilegierten“ Nutzers ohne
besondere Berechtigungen laufen lässt (siehe mkid invocation in ID Database Utilities). Zum Anlegen von Auftragsdefinitionen
benutzt es G-Ausdrücke, die dann an mcron übergeben werden (siehe
G-Ausdrücke).
(use-modules (guix) (gnu) (gnu services mcron)) (use-package-modules base idutils) (define updatedb-job ;; Run 'updatedb' at 3AM every day. Here we write the ;; job's action as a Scheme procedure. #~(job '(next-hour '(3)) (lambda () (execl (string-append #$findutils "/bin/updatedb") "updatedb" "--prunepaths=/tmp /var/tmp /gnu/store")) "updatedb")) (define garbage-collector-job ;; Jeden Tag 5 Minuten nach Mitternacht Müll sammeln gehen. ;; Die Aktion des Auftrags ist ein Shell-Befehl. #~(job "5 0 * * *" ;Vixie-cron-Syntax "guix gc -F 1G")) (define idutils-job ;; Die Index-Datenbank des Benutzers "charlie" um 12:15 Uhr und ;; 19:15 Uhr aktualisieren. Dies wird aus seinem Persönlichen ;; Ordner heraus ausgeführt. #~(job '(next-minute-from (next-hour '(12 19)) '(15)) (string-append #$idutils "/bin/mkid src") #:user "charlie")) (operating-system ;; … ;; In den %BASE-SERVICES kommt bereits eine Instanz des ;; 'mcron-service-type' vor. Wir erweitern sie um weitere ;; Aufträge mit einem 'simple-service'. (services (cons (simple-service 'my-cron-jobs mcron-service-type (list garbage-collector-job updatedb-job idutils-job)) %base-services)))
Tipp: Wenn Sie die Aktion einer Auftragsspezifikation als eine Prozedur angeben, sollten Sie ausdrücklich einen Namen für den Auftrag im dritten Argument angeben, wie oben im Beispiel zum
updatedb-job
gezeigt. Andernfalls wird für den Auftrag nur „Lambda function“ in der Ausgabe vonherd schedule mcron
angezeigt, was viel zu wenig Aussagekraft hat!
Wenn Sie einen komplexeren Auftrag mit Scheme-Code auf oberster Ebene
festlegen möchten, um zum Beispiel eine use-modules
-Form einzuführen,
können Sie Ihren Code in ein separates Programm verschieben, indem Sie die
Prozedur program-file
aus dem Modul (guix gexp)
benutzen
(siehe G-Ausdrücke). Das folgende Beispiel veranschaulicht dies.
(define %batterie-alarm-auftrag
;; Piepsen, wenn die Akkuladung in Prozent unter %MIN-NIVEAU fällt.
#~(job
'(next-minute (range 0 60 1))
#$(program-file
"batterie-alarm.scm"
(with-imported-modules (source-module-closure
'((guix build utils)))
#~(begin
(use-modules (guix build utils)
(ice-9 popen)
(ice-9 regex)
(ice-9 textual-ports)
(srfi srfi-2))
(define %min-niveau 20)
(setenv "LC_ALL" "C") ;Ausgabe auf Englisch
(and-let* ((input-pipe (open-pipe*
OPEN_READ
#$(file-append acpi "/bin/acpi")))
(ausgabe (get-string-all input-pipe))
(m (string-match "Discharging, ([0-9]+)%" ausgabe))
(niveau (string->number (match:substring m 1)))
((< niveau %min-niveau)))
(format #t "Warnung: Batterieladung nur noch (~a%)~%" niveau)
(invoke #$(file-append beep "/bin/beep") "-r5")))))))
Siehe mcron-Auftragsspezifikationen in GNU mcron für weitere Informationen zu mcron-Auftragsspezifikationen. Nun folgt die Referenz des mcron-Dienstes.
Wenn das System läuft, können Sie mit der Aktion schedule
des
Dienstes visualisieren lassen, welche mcron-Aufträge als Nächstes ausgeführt
werden:
# herd schedule mcron
Das vorangehende Beispiel listet die nächsten fünf Aufgaben auf, die ausgeführt werden, aber Sie können auch angeben, wie viele Aufgaben angezeigt werden sollen:
# herd schedule mcron 10
Dies ist der Diensttyp des mcron
-Dienstes. Als Wert verwendet er ein
mcron-configuration
-Objekt.
Dieser Diensttyp kann als Ziel einer Diensterweiterung verwendet werden, die ihn mit zusätzlichen Auftragsspezifikationen versorgt (siehe Dienstkompositionen). Mit anderen Worten ist es möglich, Dienste zu definieren, die weitere mcron-Aufträge ausführen lassen.
Verfügbare mcron-configuration
-Felder sind:
mcron
(Vorgabe: mcron
) (Typ: dateiartig)Welches mcron-Paket benutzt werden soll.
jobs
(Vorgabe: ()
) (Typ: Liste-von-G-Ausdrücken)Dies muss eine Liste von G-Ausdrücken sein (siehe G-Ausdrücke), die jeweils einer mcron-Auftragsspezifikation (der Spezifikation eines „Jobs“) entsprechen (siehe mcron-Auftragsspezifikationen in GNU mcron).
log?
(Vorgabe: #t
) (Typ: Boolescher-Ausdruck)Lässt Protokolle auf die Standardausgabe schreiben.
log-format
(Vorgabe: "~1@*~a ~a: ~a~%"
) (Typ: Zeichenkette)Eine Formatzeichenkette gemäß (ice-9 format)
für die
Protokollnachrichten. Mit dem Vorgabewert werden Nachrichten in der Form
"‘Prozesskennung Name: Nachricht"’ geschrieben (siehe
Aufrufen von mcron in GNU mcron). Außerdem
schreibt GNU Shepherd vor jeder Nachricht einen Zeitstempel.
Nächste: Log-Rotation, Vorige: Basisdienste, Nach oben: Dienste [Inhalt][Index]