Archivo de la etiqueta: systemd

Levantando servicios tras el arranque con systemd

Hace no mucho comenté en un artículo que tras la adopción de systemd en openSUSE poco a poco ha ido cambiando la manera de gestionar el arranque del sistema.

Una ventaja -entre otras- es que arranca muy rápido, pero un inconveniente -para mí, al menos- es que no funcionan los scripts de if-up.d. Os recuerdo que estos scripts se ejecutan cada vez que la interfaz de red se levanta. Estoy me venía genial para levantar el servicio Mediatomb que configura mi PC como un servidor DLNA (para ver las pelis, las series, etc., en la tele).

En openSUSE 13.2 ya no funcionan los scripts if-up.d como comenté en dicho artículo. A partir de ahora hay que crear un servicio de systemd que arranque automáticamente en cada inicio. 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.

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

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:

(*) Esto es fundamental en mi caso, pues tengo configurado mediatomb con mysql y necesito este último en ejecución antes de arrancar mediatomb.

openSUSE 13.2 y los scripts if-up.d

En una entrada anterior os contaba cómo lanzar scripts al inicio del sistema. En aquel momento usaba la versión 13.1 de openSUSE.

Hace unas semanas salió la 13.2 con nuevos cambios y versiones más actualizadas y estables de KDE o de Yast, por ejemplo. Aquí podéis ver un resumen de los mismos.

Como es lógico, de inmediato me puse manos a la obra a instalarme la nueva vesión. La verdad que me gustó bastante aunque en el portátil he tenido algún que otro problemilla gráfico -que he podido solucionar-.

Sin embargo, cuando la tenía ya instalada y configurada me dí cuenta que no se estaban ejecutando los scripts que tengo en /etc/sysconfig/network/if-up.d. Me pongo a investigar y al final, tras consultar incluso la lista de usuarios de openSUSE, llego a la conclusión de que NO funcionan en opensuse 13.2, es decir, que los scripts que se colocan en dicho directorio no se lanzan al inicio.

Parece que el problema está relacionado con la adopción hace ya tiempo de systemd, pero no lo tengo 100% claro. Por alguna web leí que habían adoptado un nuevo framework para homogeneizar la configuración de la red y que esto afectaba también.

Al final resulta que no puedo ejecutar dichos scripts en la 13.2, o al menos yo no lo conseguí. Entre esto y los problemillas que comentaba que tuve en el portátil han conseguido que en 2 de mis tres ordenadores habituales vuelva a la 13.1. En el tercero en discordia seguramente no tardaré en poner también la 13.1.

Así que si alguien está pensando en instalársela y usa estos scripts que se lo piense. Si alguien sabe una manera sencilla de hacer esto funcionar que me lo diga, porfi.