Siguiente: , Anterior: , Subir: Servicios   [Índice general][Índice]


10.8.2 Ejecución de tareas programadas

El módulo (gnu services mcron) proporciona una interfaz a GNU mcron, un daemon para ejecutar trabajos planificados de antemano (véase 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 (véase Invoking updatedb en Finding Files) y guix gc (véase Invocación de guix gc) de manera diaria, así como la orden mkid como una usuaria sin privilegios (véase mkid invocation en ID Database Utilitites). Usa expresiones-g para introducir definiciones de trabajos que serán proporcionados a mcron (véase Expresiones-G).

(use-modules (guix) (gnu) (gnu services mcron))
(use-package-modules base idutils)

(define trabajo-updatedb
  ;; Ejecuta 'updatedb' a las 3AM cada día. Aquí escribimos
  ;; las acciones del trabajo como un procedimiento Scheme.
  #~(job '(next-hour '(3))
         (lambda ()
           (execl (string-append #$findutils "/bin/updatedb")
                  "updatedb"
                  "--prunepaths=/tmp /var/tmp /gnu/store"))))

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

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) (véase 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")))))))

Véase mcron job specifications en 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
Variable Scheme: mcron-service-type

Este es el tipo del servicio mcron, cuyo valor es un objeto mcron-configuration.

Este tipo de servicio puede ser objeto de una extensión de servicio que le proporciona especificaciones de trabajo adicionales (véase Composición de servicios). En otras palabras, es posible definir servicios que proporcionen trabajos mcron adicionales para su ejecución.

Tipo de datos: mcron-configuration

Tipo de datos que representa la configuración de mcron.

mcron (predeterminado: mcron)

El paquete mcron usado.

jobs

Es una lista de expresiones-G (véase Expresiones-G), donde cada expresión-G corresponde a una especificación de trabajo de mcron (véase mcron job specifications en GNU mcron).


Siguiente: , Anterior: , Subir: Servicios   [Índice general][Índice]