Servicios systemd
Crear, editar, controlar y borrar servicios systemd en un VPS, con vuelta atrás si no arrancan y logs del journal.
- Categoría: Servidores e infraestructura
- Estado: Disponible
- Requisitos: Un VPS de la empresa encendido; Ser miembro de la empresa con acceso al VPS; Un sistema con systemd (Ubuntu 16.04 no lo soporta; se consulta con
ver_funciones_vps) - Herramientas MCP (Solo leen):
listar_servicios_vps,ver_servicio_vps,ver_logs_systemd_vps - Herramientas MCP (Escriben o modifican):
crear_servicio_vps,editar_servicio_vps - Herramientas MCP (Destructivas):
eliminar_servicio_vps,controlar_servicio_vps
¿Qué permite hacer?
- Listar todos los servicios del VPS y ver el detalle de uno: su archivo de unidad, si está activo y si arranca al inicio.
- Crear un servicio a partir del contenido completo de un archivo de unidad.
- Reemplazar el archivo de unidad de un servicio existente.
- Arrancar, detener, reiniciar, habilitar o deshabilitar un servicio.
- Borrar un servicio (salvo los protegidos) y leer sus logs.
¿Cuándo conviene usarlo?
- Un proceso que tiene que quedar corriendo siempre y que no pertenece a una app de ArduMaker: un worker, un bot, un exportador de métricas.
- Reiniciar un servicio después de cambiar su configuración.
- Revisar por qué un servicio se cae.
¿Cómo funciona en ArduMaker?
Crear
- Se valida el nombre: minúsculas, y espacios y
/pasan a guiones. Solo letras, números y_ . @ : -, hasta 200 caracteres; si no,nombre_invalido. - Si ya existe
/etc/systemd/system/<nombre>.service, se guarda una copia.backup. - Se escribe el contenido tal cual llega (sin validación extra), con permisos 644.
systemctl daemon-reload, despuéssystemctl startysystemctl enable.- Si cualquiera de esos pasos falla, se borra la unidad nueva, se restaura la copia y se recarga systemd. La respuesta dice en qué paso falló (
Failed to start service,Failed to enable service…).
En la práctica, crear un servicio siempre lo deja corriendo y habilitado al inicio; un servicio que no arranca no queda creado.
Editar
Editar reemplaza el archivo completo con el mismo procedimiento, pero hace start y no restart: si el servicio ya estaba corriendo, sigue con la configuración anterior hasta que se lo reinicie con controlar_servicio_vps y la acción restart.
Controlar y borrar
start,stopyrestartactúan ahora;enableydisablesolo cambian si arranca con el sistema.- Controlar no tiene lista de protegidos: se puede detener
nginxodocker. - Borrar detiene, deshabilita, quita
/etc/systemd/system/<nombre>.servicey recarga systemd. Una unidad que vino con un paquete del sistema queda detenida y deshabilitada, pero su archivo no está en esa carpeta y no se borra. - No se pueden borrar:
ssh,sshd,networking,systemd-journald,systemd-logind,docker,containerd,nginx,apache2,mysqlypostgresql.
¿Qué cambia realmente?
/etc/systemd/system/<nombre>.service(644) y el enlace deenableen el arranque del sistema.- El proceso en ejecución, con la salida estándar y de error en el journal.
- Una entrada en el registro de actividad del VPS por cada alta, edición, acción o borrado.
Ejemplo de unidad
Una unidad como la que arma ArduMaker para los procesos de un deploy:
[Unit]
Description=mi-worker
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mi-worker
Environment="MODO=produccion"
ExecStart=/opt/mi-worker/venv/bin/python worker.py
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.targetRestart=alwayslo vuelve a levantar si se cae.StandardOutput=journalhace quever_logs_systemd_vpsmuestre su salida.WantedBy=multi-user.targetes lo que permiteenable.
Esquema
- Pedido: nombre + contenido de la unidad
- Validación del nombre: nombre_invalido
- Agente del VPS: escribe la unidad y guarda copia
- systemd: daemon-reload → start → enable
- Resultado: activo y habilitado, o vuelta atrás
Resultado esperado
- Las respuestas de crear, editar y controlar traen
status,is_activeeis_enabledleídos después de la operación. ver_servicio_vpsdevuelveservice_file,content,status,is_active,is_enabledydetails.ver_logs_systemd_vpsdevuelve las últimas 500 líneas del journal del servicio.
systemctl status mi-worker
journalctl -u mi-worker -n 100 --no-pagerErrores y resolución
| Respuesta | Causa | Qué hacer |
|---|---|---|
Failed to start service | El proceso no arrancó; la creación se revirtió | Revisar ExecStart, rutas y permisos; leer los logs |
Failed to reload systemd daemon | La unidad tiene un error de formato | Corregir el contenido |
| 403 al borrar | Nombre protegido | Detenerlo o deshabilitarlo en su lugar |
404 Service not found | No existe ese servicio | Listar primero |
nombre_invalido | Caracteres no permitidos en el nombre | Usar el formato válido |
funcion_no_disponible (409) | El sistema del VPS no tiene systemd utilizable | No se resuelve reintentando |
| Cambié la unidad y no pasó nada | Editar hace start, no restart | Reiniciar el servicio |
Crear y editar son seguros de repetir con el mismo contenido. controlar_servicio_vps no lo es en general (repetir un stop o un restart corta el servicio otra vez) y puede detener servicios críticos. Si el VPS no contesta, el error es reintentable (424).
Relación con MCP
Sí, en los perfiles /mcp y /mcp/vps. Un agente de solo lectura solo ve listar_servicios_vps, ver_servicio_vps y ver_logs_systemd_vps.
| Herramienta | Tipo | Notas |
|---|---|---|
listar_servicios_vps, ver_servicio_vps | Lectura | — |
ver_logs_systemd_vps | Lectura | Llega marcado como contenido no confiable |
crear_servicio_vps | Escritura | Acepta idempotency_key |
editar_servicio_vps | Escritura | Reemplazo completo |
controlar_servicio_vps | Destructiva | Sin guarda de servicios protegidos |
eliminar_servicio_vps | Destructiva | Rechaza los nombres protegidos |
Para los procesos de una app de Git conviene ver_config_deploy_app y guardar_config_deploy_app en lugar de estas herramientas. Referencia en /mcp/docs y ejemplos en /mcp/servicios.