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 () (execl (string-append #$findutils "/bin/updatedb") "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!
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-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.
Next: Rotación del registro de mensajes, Previous: Servicios base, Up: Servicios [Contents][Index]