SYSTEMD. CREANDO UN SERVICIO.

En systemd, los servicios se llaman units. Dado que hay mucha información sobre systemd en Internet, no voy a explicar cada aspecto nuevo. Simplemente diremos que unit es un archivo que especifica un proceso que  systemd arrancará y target es un conjunto de units. El target más importante para nosotros será el multi-user.target, que es equivalente al runlevel 5 de SysVinit.


Targets

systemd utiliza targets («objetivos») que sirven a un propósito similar a los runlevels («niveles de ejecución»), pero que tienen un comportamiento un poco diferente. Cada target se nomina, en lugar de numerarse, y está destinado a servir a un propósito específico con la posibilidad de realizar más de una acción al mismo tiempo. Algunos targets son activados heredando todos los servicios de otro target e implementando servicios adicionales. Como hay targets de systemd que imitan los runlevels de SystemVinit, es, por tanto, posible pasar de un target a otro utilizando la orden telinit RUNLEVEL.

Conocer los targets presentes

La siguiente orden debe ser utilizada bajo systemd, en lugar de runlevel:
# systemctl list-units --type=target
A continuación vamos a comentar cómo crear un servicio personalizado (una unidad –unit-) para ejecutar el programa que queramos en el arranque. Además, veremos cómo especificar si éste depende de otro (*).
Básicamente, se trata de crear un archivo de texto plano en /etc/systemd/system con el nombre MISERVICIO.service. Lógicamente, reemplazáis MISERVICIO por el nombre que queráis. En mi caso se llama mediatomb.service y éste es su contenido:
[Unit]
Description=Mediatomb
After=mysql.service
Requires=mysql.service

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/mediatomb-mysql

[Install]
WantedBy=multi-user.target
Una vez creado el servicio tenemos que habilitarlo con:

#systemctl  enable MISERVICIO.service  

A continuacion reiniciamos el sistema y se habla ejecutado el comando.

Vemos tres secciones principales: Unit, Service e Install. Vamos a analizar los distintos parámetros de cada sección.
En la primera sección (Unit) especificamos una descripción. En la segunda indicamos que el servicio “mysql” debe estar arrancado antes que el nuestro. La opción Requieres indica que la activación/desactivación de nuestro servicio depende de la activación/desactivación del especificado en dicha opción.
En la sección Service especificamos, entre otros, el comando a ejecutar: ExecStart. El parámetro TimeoutStartSec es el tiempo tras el cuál, si el servicio no ha arrancado, se considera fallo y se detiene. Si se especifica “0”, como ha sido el caso, se ignora este parámetro.
Por úlitmo, en la sección Install especificamos la cláusula WantedBy, en la que indicamos el target al que pertenece dicha unidad.
Aquí y aquí tenéis más información sobre los distintos parámetros que acepta este fichero.
Más información sobre las generalidades de systemd:

Comentarios