4.1.2.6. Otros aspectos

Se recogen bajo este epígrafe otros aspectos interesantes relacionados con la ejecución de servicios con SystemD.

4.1.2.6.1. Servicios de usuario

Hasta ahora hemos visto como configurar y gestionar servicios de sistema, ya que al usar systemctl se sobrentiende la opción --system. Sin embargo, los usuarios particulares tienen también la posibilidad de crear, configurar y gestionar sus propios servicios. Para ello ha de tenerse presente lo siguiente:

  1. El gestor del usuario se crea al acceder el usuario al sistema. En consecuencia, ningún servicio particular de usuario se activará hasta que éste no acceda.

  2. La gestión es idéntica a la vista para el sistema, pero habrá que añadir la opción --user.

  3. Cambian las rutas en que deben almacenarse las unidades:

    • Para servicios que instala el administrador y se les quiere hacer disponibles a varios usuarios, se usa la ruta /etc/systemd/user/.

    • Para servicios exclusivos de un usuario que él mismo instala, se usa la ruta ~/.config/systemd/user.

Para consultar un ejemplo de instalación de un servicio de usuario, échele un ojo a este ejemplo sobre cómo crear un timer.

4.1.2.6.2. Servicios efímeros

Los servicios efímeros (transient en su terminología original) son servicios de un sólo uso que, además, construimos directamente en la propia línea de órdenes. Por ejemplo, esta orden:

$ systemd-run --user --service-type=oneshot sh -c 'date >> /tmp/registro.log'

ejecuta un servicio de usuario (--user) de tipo oneshot que se limita a escribir la fecha actual en un archivo de registro, porque una vez que se escriben las opciones que se consideran pertinentes a partir del primer argumento posicional se sobrentiende que se escribe la tarea[1]. SystemD se encarga de crear al vuelo la unidad y almacenarla transitoriamente hasta que se ejecuta[2].

Nota

La unidad creada tiene un nombre aleatorio que muy probablemente sea irrelevante. Si queremos fijar uno en particular, podemos añadir la opción --unit:

$ systemd-run --unit=registrador --user --service-type=oneshot sh -c 'date >> /tmp/registro.log'

Esto tiene más utilidad cuando utilicemos systemd-run para diferir la tarea.

El ejemplo, tal y como está escrito, no tiene excesiva utilidad, pero puede complicarse incluyendo el UID/GID de quien será su ejecutante (en caso de que lo ejecutemos como servicio de sistema), limitaciones (aunque no hemos tratado los systemd.slice) o programación de la tareas (que se tratará más adelante).

Notas al pie