Next: Rotación del registro de mensajes, Previous: Servicios base, Up: Servicios [Contents][Index]
El módulo (gnu services mcron)
proporciona una interfaz a
GNU mcron, un daemon para ejecutar trabajos planificados de antemano
(see GNU mcron). GNU mcron es similar al daemon
tradicional de Unix cron
; la principal diferencia es que está
implementado en Scheme Guile, que proporciona mucha flexibilidad cuando se
especifica la planificación de trabajos y sus acciones.
El siguiente ejemplo define un sistema operativo que ejecuta las órdenes
updatedb
(see Invoking updatedb in Finding Files) y
guix gc
(see Invocación de guix gc
) de manera diaria, así como la
orden mkid
como una usuaria sin privilegios (see mkid
invocation in ID Database Utilitites). Usa expresiones-g para
introducir definiciones de trabajos que serán proporcionados a mcron
(see Expresiones-G).
(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 () (system* (string-append #$findutils "/bin/updatedb") "--prunepaths=/tmp /var/tmp /gnu/store")) "updatedb")) (define trabajo-recolector-basura ;; Recolecta basura 5 minutos después de media noche, ;; todos los días. La acción del trabajo es una orden ;; del shell. #~(job "5 0 * * *" ;sintaxis de Vixie cron "guix gc -F 1G")) (define trabajo-idutils ;; Actualiza el índice de la base de datos como "carlos" a las ;; 12:15 y a las 19:15. Esto se ejecuta desde su directorio. #~(job '(next-minute-from (next-hour '(12 19)) '(15)) (string-append #$idutils "/bin/mkid src") #:user "carlos")) (operating-system ;; … ;; %BASE-SERVICES already includes an instance of ;; 'mcron-service-type', which we extend with additional ;; jobs using 'simple-service'. (services (cons (simple-service 'my-cron-jobs mcron-service-type (list garbage-collector-job updatedb-job idutils-job)) %base-services)))
Tip: When providing the action of a job specification as a procedure, you should provide an explicit name for the job via the optional 3rd argument as done in the
updatedb-job
example above. Otherwise, the job would appear as “Lambda function” in the output ofherd schedule mcron
, which is not nearly descriptive enough!
Tip: Avoid calling the Guile procedures
execl
,execle
orexeclp
inside a job specification, else mcron won’t be able to output the completion status of the job.
Para trabajos más complejos definidos en Scheme donde necesita control en el
ámbito global, por ejemplo para introducir una forma use-modules
,
puede mover su código a un programa separado usando el procedimiento
program-file
del módulo (guix gexp)
(see Expresiones-G). El siguiente ejemplo ilustra este caso.
(define %tarea-alerta-bateria
;; Pita cuando la carga de la batería es inferior a %CARGA-MIN
#~(job
'(next-minute (range 0 60 1))
#$(program-file
"alerta-batería.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 %carga-min 20)
(setenv "LC_ALL" "C") ;Procesado de cadenas en inglés
(and-let* ((entrada (open-pipe*
OPEN_READ
#$(file-append acpi "/bin/acpi")))
(salida (get-string-all entrada))
(m (string-match "Discharging, ([0-9]+)%" output))
(carga (string->number (match:substring m 1)))
((< carga %carga-min)))
(setenv "LC_ALL" "") ;Mensaje de salida traducido
(format #t "aviso: La carga de la batería es baja (~a%)~%"
carga)
(invoke #$(file-append beep "/bin/beep") "-r5")))))))
See mcron job specifications in GNU mcron, para más información sobre las especificaciones de trabajos de mcron. A continuación se encuentra la referencia del servicio mcron.
En un sistema en ejecución puede usar la acción schedule
del servicio
para visualizar los siguientes trabajos mcron que se ejecutarán:
# herd schedule mcron
El ejemplo previo enumera las siguientes cinco tareas que se ejecutarán, pero también puede especificar el número de tareas a mostrar:
# herd schedule mcron 10
Este es el tipo del servicio mcron
, cuyo valor es un objeto
mcron-configuration
.
This service type can be the target of a service extension that provides additional job specifications (see Composición de servicios). In other words, it is possible to define services that provide additional mcron jobs to run.
Available mcron-configuration
fields are:
mcron
(default: mcron
) (type: file-like)El paquete mcron usado.
jobs
(default: '()
) (type: list-of-gexps)This is a list of gexps (see Expresiones-G), where each gexp corresponds to an mcron job specification (see mcron job specifications in GNU mcron).
log?
(default: #t
) (type: boolean)Log messages to standard output.
log-file
(default: "/var/log/mcron.log"
) (type: string)Log file location.
log-format
(default: "~1@*~a ~a: ~a~%"
) (type: string)(ice-9 format)
format string for log messages. The default value
produces messages like ‘pid name: message’
(see Invoking in GNU mcron). Each message is
also prefixed by a timestamp by GNU Shepherd.
date-format
(type: maybe-string)(srfi srfi-19)
format string for date.
Next: Rotación del registro de mensajes, Previous: Servicios base, Up: Servicios [Contents][Index]