Ejecutar cualquier ejecutable como un servicio en Linux
Ejecutar cualquier ejecutable como un servicio de Linux
Aquí tienes un conjunto de instrucciones sobre Cómo Configurar para ejecutar cualquier ejecutable como servicio en Linux con Systemd.
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