Suivant: Rotation des journaux, Précédent: Services de base, Monter: Services [Table des matières][Index]
Le module (gnu services mcron)
fournit une interface pour
GNU mcron, un démon qui lance des tâches planifiées (voir GNU mcron). GNU mcron est similaire au démon Unix
traditionnel cron
; la principale différence est qu’il est
implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
spécification de la planification des tâches et de leurs actions.
L’exemple en dessous définit un système d’exploitation qui lance les
commandes updatebd
(voir Invoking updatedb dans Finding
Files) et guix gc
(voir Invoquer guix gc
) tous les jours,
ainsi que la commande mkid
en tant qu’utilisateur non privilégié
(voir mkid invocation dans ID Database Utilities). Il utilise des
gexps pour introduire des définitions de tâches qui sont passées à mcron
(voir G-Expressions).
(use-modules (guix) (gnu) (gnu services mcron)) (use-package-modules base idutils) (define updatedb-job ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions ;; l'action de la tâche comme une procédure Scheme. #~(job '(next-hour '(3)) (lambda () (system* (string-append #$findutils "/bin/updatedb") "--prunepaths=/tmp /var/tmp /gnu/store")) "updatedb")) (define garbage-collector-job ;; Lance le ramasse-miettes tous les jours à minuit cinq. ;; L'action de la tâche est une commande shell. #~(job "5 0 * * *" ;Vixie cron syntax "guix gc -F 1G")) (define idutils-job ;; Met à jour la base de données d'index en tant que « charlie » à 12h15 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur. #~(job '(next-minute-from (next-hour '(12 19)) '(15)) (string-append #$idutils "/bin/mkid src") #:user "charlie")) (operating-system ;; … ;; %BASE-SERVICES inclus déjà une instance de ;; « mcron-service-type », que nous étendons avec un ;; travail supplémentaire avec « simple-service ». (services (cons (simple-service 'my-cron-jobs mcron-service-type (list garbage-collector-job updatedb-job idutils-job)) %base-services)))
Astuce : Lorsque vous fournissez l’action d’une spécification de tâche avec une procédure, vous devriez donner un nom explicite à la tâche via le troisième argument facultatif comme dans l’exemple
updatedb-job
ci-dessus. Sinon, la tâche apparaitra comme « Lambda function » dans la sortie deherd schedule mcron
, ce qui n’est pas très descriptif !
Astuce : Évitez d’appeler les procédures Guile
execl
,execle
etexeclp
dans la spécification des tâches sinon mcron ne pourra pas afficher le statut complet de la tâche.
Pour les tâches plus complexes définies dans Scheme où vous devez contrôler
le haut niveau, par exemple pour introduire un formulaire
use-modules
, vous pouvez déplacer votre code vers un programme séparé
en utilisant la procédure program-file
du module (guix gexp)
(voir G-Expressions). L’exemple ci-dessous illustre cette possibilité.
(define %battery-alert-job
;; Beep when the battery percentage falls below %MIN-LEVEL.
#~(job
'(next-minute (range 0 60 1))
#$(program-file
"battery-alert.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-level 20)
(setenv "LC_ALL" "C") ; assure que la sortie est en anglais
(and-let* ((input-pipe (open-pipe*
OPEN_READ
#$(file-append acpi "/bin/acpi")))
(output (get-string-all input-pipe))
(m (string-match "Discharging, ([0-9]+)%" output))
(level (string->number (match:substring m 1)))
((< level %min-level)))
(format #t "warning: Battery level is low (~a%)~%" level)
(invoke #$(file-append beep "/bin/beep") "-r5")))))))
Voir mcron job specifications dans GNU mcron, pour plus d’informations sur les spécifications des tâche de mcron. Ci-dessous est la référence du service mcron.
Sur un système lancé, vous pouvez utiliser l’action schedule
du
service pour visualiser les travaux mcron qui seront exécutés ensuite :
# herd schedule mcron
Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous pouvez spécifier le nombre de tâches à afficher :
# herd schedule mcron 10
C’est le type du service mcron
, dont la valeur est un objet
mcron-configuration
.
Ce type de service peut être la cible d’une extension de service qui fournit des spécifications de tâches supplémentaires (voir Composition de services). En d’autres termes, il est possible de définir des services qui fournissent des tâches mcron à lancer.
Les champs de mcron-configuration
disponibles sont :
mcron
(par défaut : mcron
) (type : simili-fichier)Le paquet mcron à utiliser.
jobs
(par défaut : '()
) (type : liste-de-gexps)C’est la liste des gexps (voir G-Expressions), où chaque gexp correspond à une spécification de tâche de mcron (voir mcron job specifications dans GNU mcron).
log?
(par défaut : #t
) (type : booléen)Journalise les messages sur la sortie standard.
log-file
(par défaut : "/var/log/mcron.log"
) (type : chaine)Log file location.
log-format
(par défaut : "~1@*~a ~a: ~a~%"
) (type : chaine)Chaine de format (ice-9 format)
pour les message de journaux. La
valeur par défaut produit des messages de type ‘pid name:
message’ (voir Invoking dans GNU mcron). Chaque message est aussi préfixé par un horodatage
par le GNU Shepherd.
date-format
(type : peut-être-chaine)(srfi srfi-19)
format string for date.
Suivant: Rotation des journaux, Précédent: Services de base, Monter: Services [Table des matières][Index]