4.2.2. Planificación con SystemD

Como en el caso de otras tantas tareas habituales en los sistema UNIX, systemd también provee un reemplazo tanto para at como para cron.

4.2.2.1. Tareas diferidas

Puede llevarse a cabo haciendo uso de la orden systemd-run:

$ systemd-run --user <cuándo> <qué>

dónde:

--user

Establece que se usará el gestor de servicios del usuario y no el gestor de servicios del sistema. Esto nos permite usarlo con un usuarios distinto de root.

cuándo

Establece cuándo se debe ejecutar la tarea. Tenemos dos formas de establecerla:

  • Como intervalo de tiempo tras un disparador que puede ser:

    --on-boot=

    Un tiempo después de haberse producido el arranque.

    -on-active=

    Un tiempo después de lanzarse la propia orden.

    --on-startup=

    Un tiempo después de lanzarse el gestor de servicios.

    --on-unit-active=

    Un tiempo después de que se active la unidad a la que se asocia la orden.

    --on-unit-deactive=

    Un tiempo después de que se deactive la unidad a la que se asocia la orden.

    Estos tiempos pueden expresarse en ms (milisegundos). s (segundos), m (minutos), h (horas), d (días), M (meses), y (años). Por ejemplo:

    50s
    1m 30s
    12h 12s
    1M 1d
    
  • Como tiempo concreto, que requiere la opción --on-calendar=. El tiempo se expresa de la forma «2019-01-31 21:44:00 CET», aunque se puede eliminar algún término. Por ejemplo, «22:00:00» significa las próximas 10 de la noche.

qué

Puede expresarse de dos maneras:

  • --unit=nombre.service, que ejecuta el servicio con el nombre dado.

  • Escribir directamente la orden deseada con sus argumentos.

Ejemplo:

  1. Dentro de dos minutos, crea un fichero en el directorio temporal:

    $ systemd-run --user --on-active=2m touch /tmp/LO.HE.HECHO
    
  2. Crea el fichero un día concreto:

    $ systemd-run --user --on-calendar='2019-02-22 11:12:23' touch /tmp/LO.HE.HECHO
    

4.2.2.2. Planificación periódica de tareas