Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo crear y gestionar demonios en Linux con systemd

Imago voragine.net

Un demonio en Linux, y de manera general en cualquier sistema tipo UNIX, es un proceso que se ejecuta en segundo plano y es autónomo, de manera que no necesita interacción por parte de un usuario del sistema para arrancar y funcionar. Los servidores web Apache o Nginx están controlados por demonios, por ejemplo.

Los demonios son útiles para hacer funcionar programas independientes de una sesión de usuario, procesos que se inicien de manera automática cuando el sistema arranca, servicios que permanecen a la escucha para ejecutar su tarea cuando son llamados.

En este artículo se explica cómo crear un demonio en un sistema Debian Jessie funcionando con systemd, el gestor de demonios.

Definir y configurar el demonio con systemd: unit files

En systemd los demonios se definen y configuran en los llamados archivos de unidad, unit files. Estos archivos se alojan en /etc/systemd/system/. Por ejemplo, vamos a crear un demonio que se encargue de iniciar y vigilar un hipotético script (volver a iniciarlo si se para, reiniciarlo cuando el sistema se reinicie…). Para ello usaremos lo que en el argot de systemd se llama service, unit files con extensión .service:

Este unit file iniciará el script indicado con la opción ExecStart bajo el usuario usuario. Si el script falla o se para, se intentará reiniciar como indica la opción Restart. Las opciones StandardOutput y StandardError aseguran que la salida estándar y de errores del script se escribirán en el log de systemd.

Para conocer en detalle la estructura y las opciones de los unit files de systemd se puede consultar la documentación en la página de Red Hat.

Activar y controlar el demonio: la orden systemctl

Ya tenemos el demonio definido y configurado en /etc/systemd/system/undemonio.service. Ahora vamos a incluirlo en la secuencia de arranque y a activarlo:

La orden systemctl permite controlar los servicios del sitema: incluir un nuevo servicio en la secuencia de arranque con la opción enable, iniciarlo con la opción start, pararlo con stop…

Autor
Compartir

6 comentarios

    • Por Sara Padilla •

    Hola estoy siguiento tu tutorial pero tengo conflicto con estas dos lineas en el código:
    ExecStart=/ruta/hasta/el/script
    WorkingDirectory=/ruta/hasta/la/carpeta/del/script

    1. Hola Sara,

      supongamos que el script que quieres asociar al demonio está en /home/usuario/bin/script.py

      En este caso ExecStart y WorkingDirectory tendrían los siguientes valores:

      Comprueba que los permisos del directorio y el script están correctamente configurados para el usuario que ejecuta el script, definido con User.

    • Por Nani Silverstone •

    Vaya! nunca crei encontrar un tutorial tan bien explicado en español! muchas gracias por tu ayuda, ahora muchas cosas me quedaron muy claras!

    • Por PabloMart •

    gracias por la información, la verdad que muy bien explicado

    un saludo

    • Por Juan •

    Hola, oye y el script puede ser un .sh?, debe llevar alguna estructura? (Soy nuevo en Linux)

    1. Hola Juan,

      el script puede ser un .sh, sí. Puede estar programado en lo que quieras: python, php, perl, bash…

Dejar un comentario

*
*

 

Un trackback