Ejecutar un script al inicio con systemd

Published:

En esta oportunidad les muestro como crear un script y poder lanzarlo al inicio del sistema, con systemd, y probado en un Debian 9 claro, con su breve explicación para poder entender como hacerlo y no morir en el intento, de paso aprender algo más que nos puede ser de utilidad.

1- Crear un script

Antes que nada necesitamos crear un script que no es más que un simple archivo, que debe contener algo muy importante para arrancar y es #!/bin/bash, así que usamos un editor, en mi caso nano para crearlo:

# nano /usr/local/sbin/servicios

Dentro vamos a colocar lo que necesitamos quedando con la siguiente estructura:

#!/bin/bash
CONTENIDO

Una vez que lo guardamos con F2, le damos permisos de ejecución.

# chmod +x /usr/local/sbin/servicios

2- Crear el servicio con systemd

Es importante que el nombre al final termine con .service, dado que así lo entenderá systemd. Recordá que también debe tener permisos (otra forma es # chmod 777 servicio.service)

# nano /etc/systemd/system/servicios.service

El contenido será el siguiente, teniendo en cuenta que la primera de las instrucciones especifica que se debe iniciar tras sección syslog.target.

ExecStart=/usr/local/sbin/servicio.service se da la ruta en dónde realmente está el script a ejecutar.

Después viene el tipo de servicio que hay varios, pero para este caso será:

[Service]
Type=forking

Por último, la sección [Install] nos dice en qué runlevel se ejecutará. En el modo multiusuario o en el clásico sysv, que sería el runlevel 3.

El contenido entonces deberá ser algo como:

[Unit]
Description=Lanza servicios varios
After=syslog.target

[Service]
Type=forking
ExecStart=/usr/local/sbin/servicios

[Install]
WantedBy=multi-user.target

3- Una vez este todo configurado debemos recargar.

# systemctl daemon-reload

Para lanzar el servicio simplemente hacemos:

# systemctl start servicios.service

Para habilitarlo al inicio y que se lance automáticamente:

# systemctl enable servicios.service

Y finalmente para ver el estado podemos hacer:

# systemctl status servicios.service

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles