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.
Qué es Systemd
Antes de pasar a conocer cada uno de los pasos que hay que seguir para crear un servicio o daemon por tu cuenta, hay que tener más información sobre Systemd. Este se basa en sí en un bloque de construcción básico para un sistema operativo o, como también lo definen, es el administrador de servicios que se puede utilizar en Linux y en su mayoría de distribuciones de Debian y Red Hat para tener tus propios deominios o daemon.
Para qué se puede utilizar
Para que tengas una idea más clara de qué es Systemd, hay que tener en cuenta que es un conjunto de demonios que sirven para llevar la administración de sistemas, herramientas y bibliotecas que se diseñaron con la finalidad de poder interactuar con el sistema operativo Linux. Además de que tiene diferentes usos que son de gran utilidad como:
- systemctl: que sirve para controlar tanto el sistema como los servicios del administrador.
- journalctl: el objetivo de esta utilidad es la de administrar el sistema de registro de esta herramienta.
- hostnamectl: te sirve para controlar el nombre de host.
- localectl: en este caso sirve para llevar a cabo la configuración de la distribución local y el teclado del sistema.
- timedatectl: su utilidad es la de poner la hora y la fecha del sistema operativo.
- systemd-cgls: te dará la posibilidad que se pueda mostrar el contenido de cgroup.
- systemadm: en este caso es la opción para tener la interfaz para el comando systemctl.
Al igual que hay que tener en cuenta que, entre los principales usos, se encuentra la opción de analizar el estado del sistema, además de la gestión de este y de los servicios en sí. Por lo que se puede usar para listar unidades en ejecución, saber cuáles son las unidades que fallan, así como otras opciones para detener, activar o reiniciar las unidades.
Qué comandos hay
Hay que tener en cuenta que en este administrador en particular se pueden llegar a usar una serie de comandos. ¿Para qué? Muy sencillo, para ejecutar diferentes funcionalidades. Entre los más utilizados se pueden encontrar las siguientes alternativas:
- list-units: nos da la oportunidad de conseguir una lista de las unidades que se conocen de manera predeterminada.
- list-unit-files: con este comando se puede mostrar la lista de las unidades que están instaladas en ese momento en el sistema.
- isolate: este comando permite iniciar la unidad indicada y sus dependencias. Además, otra de sus cualidades es que a la vez de la acción anterior consigue detener el resto de unidades.
- show: se puede usar para que muestre las propiedades de una unidad.
- enable: este comando se puede utilizar para habilitar una unidad.
- disable: podemos usarlo para deshabilitar una unidad en particular.
preset: esta opción permite que podamos para resetear una unidad. - cancel: esta opción se utiliza para cancelar un trabajo.
- is-activate: permite que los usuarios tengamos la opción para revisar si una unidad está siendo ejecutada.
- is-failed: este comando revisa si la unidad se encuentra en estado ¨failed¨.
- halt: con este comando podemos cerrar la sesión y también apagar el sistema.
reboot: se puede utilizar este comando para reiniciar el sistema. - poweroff: la función de este comando es la de apagar el sistema como si se desconectase el cable de la corriente.
- suspend: esta alternativa da la opción a los usuarios de que podamos hacer que el sistema entre en modo de suspensión.
- start: se utilizar para activar un servicio.
- stop: consigue que se detenga un determinado servicio.
- reload: este comando hace posible que se pueda recargar un servicio.
- restart: su función es estrictamente la de reiniciar un servicio.
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.
Críticas a Systemd
Cuando se implementó esta función en los dispositivos Linux, se generó cierta controversia dentro de la comunidad dedicada al software libre. Y estas vienen de dos fuentes de problemas diferentes, con argumentos que tienen que ver tanto con la propia implementación y la arquitectura de la herramienta.
Con respecto a la arquitectura, la comunidad piensa que se trata de algo muy complejo, y que a mayores recibe nuevas características nuevas lo cual aumenta la complejidad de esta herramienta. Por otro lado, también dicen que esto va en contra de los principios de diseño en los que están basados todos los sistemas operativos de Unix. En cuanto a la implementación el riesgo en más pensando en el futuro, donde hay preocupación porque esto se convierta en un sistema de dependencias. Lo cual podría obligar a los usuarios a no tener más alternativa que adoptar Systemd, a medida que cada vez más software dependa de las funciones que dependen de esta herramienta.
Adopción de Systemd
En el año 2011, esta aplicación apareció de forma predeterminada en la distribución de Linux, Fedora. Pero hoy en día ya es posible encontrarla en algunas de las más conocidas. Y en algunas otras distribuciones, los paquetes de Systemd se ofrecen como elementos que no son soportados de forma oficial, pero que si pueden utilizarse como en otras distribuciones, como por ejemplo Gentoo.
- Debian GNU/Linux: Desde la versión 8 en adelante.
- Fedora: Desde la versión 15 en adelante.
- Frugalware: Apareció por primera vez en la versión 1.5.
- Mageia: Desde la versión 2.
- Red Hat Enterprise: Primera aparición en la versión 7.
- CentOS: Desde julio de 2014.
- Ubuntu: Una de las más utilizadas, vio pro primera vez Systemd en la versión 15.04, en abril de 2015.
- Arch Linux: Apareció por primera vez en 2012.
- Sudiction: Desde diciembre de 2013.
- OpenSUSE: Desde la versión 12.1 y superior.
Systemd para empresas
En términos generales, Systemd ha demostrado ser una solución adecuada para empresas que requieren un sistema de inicialización confiable y escalable. Su enfoque en la modularidad y la flexibilidad le permite adaptarse fácilmente a diferentes entornos y necesidades empresariales. Además, su capacidad para controlar y monitorizar procesos del sistema hace que sea más fácil para los administradores de sistemas solucionar problemas y mantener el sistema en funcionamiento de manera eficiente.
Sin embargo, es importante tener en cuenta que, a pesar de sus ventajas, Systemd también ha generado controversia en la comunidad de usuarios de Linux. Algunos críticos argumentan que su enfoque monolítico y la complejidad de su diseño pueden hacer que sea más difícil para los administradores de sistemas realizar tareas simples. Además, su integración en algunas distribuciones de Linux ha sido objeto de debate y ha generado algunas fricciones. A pesar de estas críticas, muchas empresas han adoptado Systemd y lo utilizan con éxito para gestionar sus sistemas. La amplia disponibilidad de documentación y soporte en línea también ha hecho que sea más fácil para los administradores de sistemas aprender a utilizar Systemd y resolver problemas.
En conclusión, Systemd es una opción viable y popular para empresas que buscan un sistema de inicialización de software confiable y escalable. Si bien es cierto que algunos críticos han expresado sus reservas sobre su diseño y enfoque, la mayoría de las empresas que lo han adoptado han encontrado que funciona bien para sus necesidades. Como con cualquier tecnología, es importante hacer una evaluación cuidadosa de las necesidades empresariales antes de adoptar Systemd, pero en general, es una solución sólida para las empresas que buscan una forma eficiente de gestionar sus sistemas basados en Linux. En todo caso, al igual que cualquier otra implementación es un sistema el cual debe ser profundamente evaluado para valorar su impacto.
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 si se tienen en cuenta todos los elementos anteriores.