Ejecutar cualquier ejecutable como un servicio en Linux

Ejecutar cualquier ejecutable como un servicio de Linux

Índice

Aquí tienes un conjunto de instrucciones sobre Cómo Configurar para ejecutar cualquier ejecutable como servicio en Linux con Systemd.

linux cogs Arriba se muestra una imagen generada por IA (con el modelo Flux 1 dev) de las ruedas dentadas que representan el enfoque DIY de Linux.

Systemd

Systemd es un administrador de sistema y servicios, así como una herramienta de inicialización en algunas distribuciones de Linux.

Algunas de las distribuciones populares con systemd:

  • Ubuntu 16.04 o posterior
  • Debian Jessie o posterior
  • Arch Linux
  • CentOS 7 / RHEL 7 o posterior
  • Fedora 15 o posterior

systemctl

systemctl es una herramienta de línea de comandos para controlar el systemd.

listar todos los servicios

Para listar todos los servicios, ejecuta

systemctl list-units --type=service

Crear un archivo de servicio

Navega hasta el directorio de servicios de systemd y crea un nuevo archivo con la extensión .service13:

sudo nano /etc/systemd/system/your_service_name.service

Configura el archivo de servicio:

Agrega el siguiente contenido al archivo, ajustando los valores según sea necesario135:

[Unit]
Description=Descripción de tu servicio
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/ruta/a/tu/directorio/ejecutable
ExecStart=/ruta/a/tu/ejecutable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo.

Inicio retrasado del servicio

Si sospechas de un problema de temporización durante el inicio del servicio, considera agregar un retraso a tu configuración de servicio:

[Service]
ExecStartPre=/bin/sleep 10

Dependencias del servicio

Para configurar las dependencias de tu servicio: en la sección [Unit] del archivo de configuración del servicio,

agrega las siguientes directivas:

Usa After= para especificar servicios que deben iniciar antes de tu servicio:

After=network.target otro_servicio.service

Usa Requires= para definir dependencias duras:

Requires=servicio_requerido.service

Usa Wants= para dependencias suaves:

Wants=servicio_opcional.service

Recargar systemd para reconocer el nuevo servicio

sudo systemctl daemon-reload

Verificar dependencias del servicio

sudo systemctl list-dependencies your_service_name.service

Habilitar el servicio para iniciar en el arranque

sudo systemctl enable your_service_name.service

Para verificar que tu servicio esté configurado para iniciar en el arranque:

sudo systemctl is-enabled your_service_name.service

Iniciar el servicio

sudo systemctl start your_service_name.service
# o
sudo systemctl restart your_service_name.service

Verificar el estado del servicio

Si algo salió mal, verifica los registros y el estado del servicio de Linux:

sudo systemctl status your_service_name.service

o

sudo journalctl -u your_service_name.service

Para scripts de Python

ExecStart=/ruta/a/conda/envs/my_env_name/bin/python /ruta/a/ejecutable.py

Comentarios

Ahora puedes gestionar tu servicio usando comandos de systemctl, como start, stop, restart y status.

Para ejecutables que requieren parámetros, modifica la línea ExecStart en el archivo de servicio según sea necesario.

Por ejemplo, si necesitas ejecutar una aplicación Java, usa el comando completo de Java en la línea ExecStart.

Recuerda ajustar los permisos de archivos y propietarios según sea necesario, y asegúrate de que el ejecutable tenga los permisos correctos para ejecutarse.

Control de servicios de Systemd con chkservice

En lugar de ejecutar

sudo systemctl start some-serviceservice
# o
sudo systemctl restart some-serviceservice

Puedes usar una herramienta de interfaz de consola. Fácil y ligera

sudo apt-get install chkservice

sudo chkservice

Enlaces útiles