Cómo crear un servicio en Linux con systemd

Josué Acevedo Maldonado
3 min readMar 2, 2023

--

Foto de Howard Bouchevereau en Unsplash

En el desarrollo de aplicaciones web, es frecuente que se deban llevar a cabo tareas de procesamiento en un script de ejecución asincrónico, programar tareas para más adelante o crear un demonio que se conecta directamente con los clientes a través de un socket. A pesar de que existen herramientas como servidores de cola de tareas, puede ser necesario crear nuestro propio servicio para obtener un nivel de flexibilidad que no se logra al depender de las restricciones de software de terceros.

En este artículo, se presentará un ejemplo de cómo convertir un programa en un servicio utilizando systemd y cómo configurarla adecuadamente para asegurarse de este siempre en funcionamiento.

Para comenzar, partimos de un sitio web de ejemplo, echo en Vite.js (https://vitejs.dev/) y cuyo comando de ejecución es:

npm run serve

Vamos a crear un archivo llamado /etc/systemd/system/vite.service:

[Unit]
# Proporciona una descripción breve del servicio que se está configurando.
Description = service vite up
# Especifica que el servicio se iniciará después de que se complete el arranque de la red.
After = network.target

[Service]
# Especifica la ruta del archivo ejecutable que se utilizará para iniciar el servicio.
ExecStart=/usr/local/bin/runvite.sh
# Especifica si se debe reiniciar automáticamente el servicio cuando se cierra inesperadamente.
Restart=always
# Especifica la cantidad de tiempo en segundos que el servicio debe esperar antes de intentar reiniciar después de cerrarse inesperadamente.
RestartSec=3

[Install]
# Especifica el nivel de ejecución en el que se iniciará el servicio. En este caso, el servicio se iniciará en el nivel de multi-usuario.
WantedBy = multi-user.target

Las opciones elegidas en nuestro archivo nos permiten asegurar que el proceso de vite.js en este caso, se mantenga siempre en ejecución, se puede encontrar más información en el siguiente enlace (https://www.freedesktop.org/software/systemd/man/systemd.service.html).

El archivo runvite.sh contiene el comando a ejecutar por parte del servicio, sin embargo, se ha colocado en la ruta /usr/local/bin debido a un asunto de permisos en el sistema operativo [status=203/EXEC], es posible encontrar más información en el siguiente enlace (https://unix.stackexchange.com/questions/472950/systemd-status-203-exec-error-when-creating-new-service), no olvidar el proporcionarle permisos de ejecución al script: chmod +x runvite.sh .

#!/bin/bash
cd /application/directory
npm run serve &

Una vez que se ha creado el archivo vite.service, se puede iniciar el servicio utilizando el siguiente comando:

$ systemctl start vite

Además, podemos hacer que el servicio se inicie automáticamente en el arranque de la maquina utilizando el comando:

systemctl enable vite

Como también verificar su estatus con:

systemctl status vite

Si desea realizar cambios en el archivo .service , debe volver a cargar las configuraciones, para asegurarse que systemd reconoce los cambios utilice el siguiente comando:

systemctl daemon-reload

y reinicie el demonio:

systemctl restart vite

Eso es todo lo que se necesita para crear un servicio de Linux con systemd, escribir un pequeño archivo de configuración .service que haga referencia a su archivo con el comando a ejecutar.

Systemd ha sido el sistema de inicio predeterminado en RHEL/CentOS, Fedora, Ubuntu, Debian y otros desde hace varios años, por lo que es probable que su servidor esté listo para alojar sus servicios.

Josue Acevedo Maldonado is a software engineer, currently working as a consultant.

Connect in LinkedIn.

Thank you for being part of the community!
You can find related content on the channel YouTube, Twitter, Twitch, Spotify, etc, besides the book Ensamblador X86.

Finally, if you have enjoyed this article and feel that you have learned something valuable, please share so others can learn from it as well.

Thanks for reading!

--

--

Josué Acevedo Maldonado
Josué Acevedo Maldonado

Written by Josué Acevedo Maldonado

Amante de la tecnologia y con pasion en resolver problemas interesantes, consultor, y creador del canal de youtube NEOMATRIX. https://linktr.ee/neomatrix

No responses yet