¿Cómo convertir un servicio de xinetd a SystemD?

En la entrada de hoy vamos a ver cómo convertir un servicio de xinetd a SystemD. Esto puede ser muy útil si hemos subido de versión un sistema, por ejemplo, un RHEL 5 o 6, a versiones superiores, como la 7, 8 u 9.

De xinetd ya os hablé en su día. Básicamente se encarga de tener la misma función que initd, esto es, que inicia programas que brindan servicios para Internet. Dichos servicios tienen su configuración de arranque en un fichero ubicado dentro de la carpeta /etc/xinetd.d

Convertir un servicio de xinetd a SystemD

No nos vamos a ir mucho por las ramas. Como ejemplo, vamos a utilizar un servicio configurado de NRPE que tenemos con el fichero de configuración ubicado en /etc/xinetd.d/nrpe, con este aspecto:

service nrpe
{
        flags           = REUSE
        socket_type     = stream
        port            = 5666
        wait            = no
        user            = nagios
        group           = nagios
        server          = /usr/local/nagios/bin/nrpe
        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd
        log_on_failure  += USERID
        disable         = no
        only_from       = 127.0.0.1
}

La ruta del binario de la aplicación se maneja desde /usr/local/nagios/bin/nrpe y su fichero de configuración está en /usr/local/nagios/etc/nrpe.cfg El archivo de servicio anterior se traduciría a los dos archivos de unidad siguientes:

El primero fichero /etc/systemd/system/nrpe.socket, con el siguiente contenido:

[Unit]
Description=NRPE Socket
 
[Socket]
ListenStream=5666
Accept=yes
 
[Install]
WantedBy=sockets.target

Y el segundo fichero, llamado /etc/systemd/system/nrpemorse@.service, con el contenido:

[Unit]
Description=NRPE Per-Connection Server
 
[Service]
ExecStart=/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg --inetd     
User=nagios
Group=nagios
StandardInput=socket

Una vez hecho esto, añadimos la nueva unidad al arranque y encendemos:

systemctl enable nrpe.socket
systemctl start nrpe.socket
systemctl status -l nrpe.socket

De esta manera ya tendremos pasado el servicio de xinetd a SystemD.

Fuentes consultadas

How to convert xinetd service to systemd?