Aprende a crear tus propios servicios en Linux usando Systemd

Systemd es un conjunto de demonios o daemons, herramientas, librerías y servicios diseñados para administrar y configurar de manera centralizada todos los servicios en sistemas operativos Linux. Systemd nos permite interactuar directamente con el núcleo o kernel del sistema operativo, y hoy en día este daemon está presente en la gran mayoría de distribuciones basadas en Linux como Debian, Ubuntu y muchas más. Teniendo en cuenta que es el encargado de controlar los servicios del sistema, es fundamental poder saber cómo crear un servicio por nosotros mismos, para arrancarlo y pararlo cuando nosotros queramos, algo fundamental para administrar adecuadamente nuestro sistema operativo. Hoy en RedesZone os vamos a enseñar a crear tus propios servicios en sistemas Linux.

Hoy en día la gran mayoría de aplicaciones dependen de Systemd para crear sus propios demonios, o también conocidos como «daemon» o simplemente servicios en el sistema. Cuando instalamos un nuevo programa, si este se tiene que ejecutar al inicio del sistema operativo, incorporará directamente un archivo específicamente diseñado para que systemd lo reconozca y lo inicie cada vez que arrancamos el sistema operativo, sin embargo, es muy posible que no todas las aplicaciones incorporan esta funcionalidad, y si queremos que arranquen con el sistema operativo, deberemos crear nosotros mismos una configuración específica para que arranque automáticamente y esté constantemente en el sistema.

En el siguiente ejemplo que os vamos a mostrar, vamos a crear un servicio para el motor de actualización de Tiny Tiny RSS, aunque realizando unas leves modificaciones que os indicaremos más adelante, vamos a poder utilizarlo para ejecutar cualquier script, comando o servicio que nosotros necesitemos ejecutar en segundo plano en nuestro sistema operativo con Systemd.

Uno de los puntos fuertes de Systemd, es que funciona exactamente igual en todos los sistemas operativos basados en Linux, no importa que utilices Debian, Ubuntu o cualquier otra distribución, en todos es exactamente igual, y te servirá el mismo archivo de configuración.

Crea un servicio o daemon propio

Lo primero que debemos hacer es entrar en la ruta donde se encuentran todos los servicios de Systemd, en nuestro caso os vamos a poner los ejemplos haciendo uso de Debian, pero la ruta en los diferentes sistemas operativos es exactamente la misma, no debería haber ninguna diferencia.

La ruta donde debemos ir para ver todos y cada uno de los servicios es «/etc/systemd/system/», por lo tanto, si usamos el comando «cd» vamos a poder ir hasta esta ruta sin problemas:

cd /etc/systemd/system/

Si hacemos un «ls» para listar todos los servicios, vamos a poder ver todos los que hay creados de forma predeterminada. Dependiendo de los programas que hayas instalado, tendremos unos servicios u otros.

Una vez que estamos en la ruta correcta, ahora tendremos que crear un fichero que termine en «service», tal y como podéis ver en la anterior captura. Toda la configuración a realizar debe estar en este fichero de configuración, en nuestro caso vamos a crear un fichero llamado «ttrssupdate.service» ejecutando el comando:

sudo nano ttrssupdate.service

En el caso de que queráis usar vi o vim también podréis hacerlo sin problemas, no importa qué editor de texto uséis, lo más importante es el contenido del archivo para crear el daemon personalizado, y que tengan la extensión «service» tal y como habéis visto. Debemos tener en cuenta que para crear en esta ruta un archivo, es completamente necesario ser root para crearlo, o bien usar «sudo» para poder crearlo adecuadamente.

El contenido del archivo, en este ejemplo, es el siguiente:

[Unit]
Description=Daemon TTRSS Auto-Update Feeds
After=network.target mysql.service
[Service]
User=www-data
ExecStart=/var/www/html/rss/update_daemon2.php
[Install]
WantedBy=multi-user.target

Debemos tener en cuenta que este servicio se iniciará siempre con el sistema operativo, a no ser que decidas que no sea así.

A continuación, os vamos a enseñar qué significa cada una de las partes del fichero de configuración anterior:

  • Description: podemos introducir aquí el nombre y una descripción de lo que va a hacer nuestro daemon, en este caso podemos poner lo que nosotros queramos, es una descripción de cara al administrador de sistemas, para conocer qué hace el daemon sin necesidad de mirar más código.
  • After: indicaremos si queremos que se cargue después de otros servicios o componentes del sistema. Esto es algo muy importante, porque si nuestro servicio requiere que otro servicio esté levantado, entonces tendremos que seguir una secuencia en concreto. También existe otra directiva llamada «Before» que hace lo contrario, indicando que nuestro servicio se ejecute antes que ese otro servicio que nosotros especificamos.
  • User: el usuario del sistema operativo que ejecutará el daemon. También puede funcionar con Group. Esto es muy importante, porque dependiendo de los permisos que necesite el servicio, tendremos que ejecutarlo con root, nuestro usuario no privilegiado o cualquier otro usuario del sistema.
  • ExecStart: debemos indicar la ruta absoluta (no funcionan relativas) al script o binario que queremos ejecutar para arrancar el servicio en cuestión.
  • WantedBy: directivas de uso y otras dependencias.

Una vez que ya tenemos nuestro archivo .service configurado, es recomendable revisar que el propietario del archivo sea root y el grupo también, además, deberíamos configurar permisos 777 al archivo en cuestión, lo podemos hacer así:

chmod 777 ttrssupdate.service

Ahora que ya lo tenemos plenamente configurado, tenemos que habilitarlo y os enseñaremos a gestionar el servicio.

Administrar el servicio creado

Ahora que ya hemos creado el servicio en el sistema operativo, antes de poder empezar a utilizarlo debemos habilitarlo con el comando «enable». Para poder hacer esto, simplemente tenemos que ejecutar el comando «systemctl enable» seguido del nombre del servicio que acabamos de crear. No es necesario ejecutar esto en la misma ruta donde se almacenan los archivos, en nuestro caso sería:

systemctl enable ttrssupdate.service

Por supuesto, nos pedirá la contraseña de superusuario del sistema para poder habilitarlo adecuadamente, para este tipo de tareas es fundamental tener permisos de superusuario, de lo contrario no podremos hacer nada.

Ahora que ya hemos habilitado el servicio, lo tenemos que iniciar manualmente la primera vez. A partir de este momento siempre estará en ejecución, incluso cuando reiniciemos el sistema operativo, este servicio también arrancará automáticamente.

systemctl start ttrssupdate.service

En estos instantes, ya estará el servicio activo en nuestro sistema operativo. Aunque systemd puede ser bastante complicado si nos metemos en cosas avanzadas, crear un servicio no es demasiado complicado, tal y como habéis visto a lo largo de este tutorial. A continuación, os vamos a enseñar otros comandos muy útiles para administrar nuestro servicio recién creado:

  • sudo systemctl daemon-reload: esta orden nos permite recargar todos los servicios de nuevo, muy útil por si modificamos varios de ellos, de esta forma, podremos hacerlo de forma global con todos.
  • sudo systemctl stop ttrssupdate.service: este comando nos permite detener el servicio anteriormente iniciado, al detener el servicio podríamos hacer cambios que arrancado no se podrían hacer, por ejemplo, también para aplicar cambios tendremos que parar e iniciar el servicio.
  • sudo systemctl restart ttrssupdate.service: nos permite reiniciar el servicio (es lo mismo que pararlo y arrancarlo, pero en un solo comando).
  • journalctl -u ttrssupdate.service: nos permite ver el registro generado por el servicio en cuestión, por si hay algún error a la hora de ejecutarlo, o algún aviso que podría dar lugar a futuros problemas.
  • sudo systemctl status ttrssupdate.service: nos permite ver la información de estado sobre el servicio en cuestión, este comando es fundamental para ver si está en funcionamiento o no.

Tal y como habéis visto, crear un servicio con systemd es bastante sencillo, y administrarlo utilizando los diferentes comandos que os hemos indicado también lo es.

¡Sé el primero en comentar!