SystemdServiciosLinux7 min de lectura

Gestionar servicios con systemd

Gestioná servicios del sistema con systemd: iniciá, detené, habilitá y creá tus propios servicios.


Systemd es el sistema de inicio de Linux moderno. Te permite crear, controlar y monitorear servicios que arrancan automáticamente con el sistema.

Comandos básicos de systemctl

bash
sudo systemctl start nombre-servicio
sudo systemctl stop nombre-servicio
sudo systemctl restart nombre-servicio
sudo systemctl reload nombre-servicio
sudo systemctl status nombre-servicio
sudo systemctl enable nombre-servicio   # Arranque automático
sudo systemctl disable nombre-servicio  # Desactivar arranque

Listar servicios

bash
systemctl list-units --type=service
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service

Crear un servicio personalizado

Supongamos que tenés una app Python en /home/deploy/mi-api/.

Creá el archivo de servicio:

bash
sudo nano /etc/systemd/system/mi-api.service

Contenido:

ini
[Unit]
Description=Mi API Python
After=network.target

[Service]
Type=simple
User=deploy
Group=deploy
WorkingDirectory=/home/deploy/mi-api
Environment=PATH=/home/deploy/mi-api/.venv/bin
ExecStart=/home/deploy/mi-api/.venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Activar el servicio

bash
sudo systemctl daemon-reload
sudo systemctl enable mi-api
sudo systemctl start mi-api
sudo systemctl status mi-api

Ver logs del servicio

bash
sudo journalctl -u mi-api -f          # Logs en vivo
sudo journalctl -u mi-api --since today
sudo journalctl -u mi-api -n 50       # Últimas 50 líneas

Opciones útiles del servicio

ini
# Reiniciar si usa mucha memoria
MemoryMax=512M

# Reiniciar automáticamente si falla
Restart=on-failure
RestartSec=10

# Variables de entorno desde archivo
EnvironmentFile=/home/deploy/mi-api/.env

Recargar después de cambios

Si modificás el archivo .service:

bash
sudo systemctl daemon-reload
sudo systemctl restart mi-api

¿Te resultó útil esta guía?