Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


10.8.2 Geplante Auftragsausführung

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 Aufruf von guix gc) 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
  ;; 'updatedb' jeden Tag um 3 Uhr morgens ausführen. Hier schreiben wir
  ;; die vom Auftrag durchzuführende Aktion als eine Scheme-Prozedur.
  #~(job '(next-hour '(3))
         (lambda ()
           (execl (string-append #$findutils "/bin/updatedb")
                  "updatedb"
                  "--prunepaths=/tmp /var/tmp /gnu/store"))))

(define garbage-collector-job
  ;; Jeden Tag 5 Minuten nach Mitternacht Müll sammeln gehen.
  ;; Die Aktions 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
  ;; …
  (services (cons (service mcron-service-type
                           (mcron-configuration
                            (jobs (list garbage-collector-job
                                        updatedb-job
                                        idutils-job))))
                  %base-services)))

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
Scheme-Variable: mcron-service-type

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.

Datentyp: mcron-configuration

Datentyp, der die Konfiguration von mcron repräsentiert.

mcron (Vorgabe: mcron)

Welches mcron-Paket benutzt werden soll.

jobs

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).


Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]