Inicio › Herramientas para desarrolladores › Generador de archivos de servicio systemd

Generador de archivos de servicio systemd

Completa el comando, el usuario y la política de reinicio y obtén un archivo de unidad systemd listo para usar con comandos de instalación para copiar y pegar. Incluye opciones de variables de entorno, orden de arranque, límites de recursos y aislamiento, y señala errores comunes como rutas relativas o sintaxis de shell en ExecStart.

Última actualización:

Servicio
.service
Más comandos
Orden de arranque y reinicio
Entorno y registros
Endurecimiento de seguridad

Archivo de unidad generado

    Publicidad
    Publicidad

    Cómo usar Generador de archivos de servicio systemd

    1. Elige un ejemplo parecido a tu programa y haz clic en Cargar ejemplo, o empieza a editar la unidad Node.js predeterminada.
    2. Ingresa el nombre de la unidad, la descripción y el comando ExecStart con una ruta absoluta, más el directorio de trabajo y el usuario que debe ejecutarlo.
    3. Elige la política de reinicio y añade las unidades tras las que debe arrancar, las variables de entorno y el nombre del registro.
    4. Aplica el endurecimiento con el ajuste Básico o Estricto y luego ajusta cada opción por separado.
    5. Copia el archivo de unidad o abre Comandos de instalación, pégalos en una terminal y revisa el servicio con systemctl status.

    Anatomía de un archivo de unidad

    Una unidad de servicio es un archivo de texto plano con tres secciones. Las directivas distinguen mayúsculas y minúsculas, y cada una pertenece a una sección:

    SecciónDirectivaQué hace
    [Unit]Description=Nombre legible que muestra systemctl status.
    After= / Wants=Orden de arranque y dependencia débil. After por sí sola no activa una unidad.
    Requires=Dependencia fuerte: si la unidad requerida se detiene, esta también.
    StartLimitIntervalSec=, StartLimitBurst=Rendirse tras demasiados reinicios en un periodo de tiempo.
    [Service]Type=Cómo sabe systemd que el servicio ha arrancado (simple, exec, forking, notify, oneshot, idle).
    ExecStart=El comando a ejecutar. No es una shell: sin tuberías ni redirecciones.
    User= / Group=Cuenta con la que se ejecuta el proceso (root si se omite en servicios del sistema).
    WorkingDirectory=Directorio actual del proceso.
    Restart= / RestartSec=Cuándo reiniciar automáticamente y cuánto esperar antes (por defecto 100 ms).
    Environment= / EnvironmentFile=Variables para el proceso; un - al inicio de la ruta del archivo lo hace opcional.
    [Install]WantedBy=Destino que activa el servicio cuando está habilitado, normalmente multi-user.target.

    Comandos cotidianos de systemctl y journalctl

    ComandoPara qué sirve
    sudo systemctl daemon-reloadRecarga los archivos de unidad después de crearlos o editarlos.
    sudo systemctl enable --now appArranca al iniciar el sistema y también ahora mismo.
    sudo systemctl restart app / reload appReinicia el proceso, o ejecuta ExecReload (recarga de configuración sin interrupción).
    systemctl status appEstado, PID principal, memoria y las últimas líneas del registro.
    journalctl -u app -fSigue el registro del servicio en vivo; añade --since "1 hour ago" para filtrar.
    sudo systemctl edit appCrea una anulación drop-in en lugar de cambiar el archivo original.
    systemd-analyze verify app.serviceRevisa un archivo de unidad en busca de directivas desconocidas y archivos que faltan.
    systemd-analyze security appMuestra la puntuación de exposición del aislamiento y qué opciones la mejorarían.

    Consejos

    • Escapa los caracteres especiales. En los archivos de unidad, % inicia un especificador (por ejemplo, %n es el nombre de la unidad), así que escribe %% para un signo de porcentaje literal. $VAR y ${VAR} en ExecStart se sustituyen desde Environment, y $$ es un signo de dólar literal.
    • Registra en stdout. Todo lo que imprime el programa va al journal automáticamente; no hacen falta archivos de registro salvo que los quieras.
    • Endurece paso a paso. Empieza con Básico, reinicia el servicio y revisa sus registros, y luego prueba Estricto. Si la aplicación necesita escribir en algún sitio, añade esa carpeta a ReadWritePaths.
    • Prefiere los temporizadores a cron en equipos con systemd. Un servicio oneshot más una unidad .timer obtiene registros, dependencias y recuperación de ejecuciones perdidas sin coste.

    Preguntas frecuentes

    ¿Dónde pongo un archivo de servicio systemd?

    Los servicios del sistema que creas van en /etc/systemd/system/nombre.service. Los servicios por usuario van en ~/.config/systemd/user/nombre.service. Después de añadir o cambiar un archivo, ejecuta systemctl daemon-reload (o systemctl --user daemon-reload) para que systemd lo lea.

    ¿Cómo hago que un servicio arranque al iniciar el sistema?

    La sección [Install] con WantedBy=multi-user.target le dice a systemd dónde enganchar el servicio. Ejecuta sudo systemctl enable --now nombre.service para crear ese enlace e iniciarlo de inmediato. Los servicios de usuario usan WantedBy=default.target, y loginctl enable-linger los mantiene en marcha cuando cierras sesión.

    ¿Cuál es la diferencia entre Restart=always y Restart=on-failure?

    on-failure reinicia el servicio solo cuando sale con un código distinto de cero, lo mata una señal, se agota el tiempo o salta el watchdog. always también lo reinicia tras una salida limpia. Ninguno reinicia un servicio que detienes con systemctl stop. Si los reinicios ocurren más de StartLimitBurst veces dentro de StartLimitIntervalSec (5 en 10 segundos por defecto), systemd se rinde.

    ¿Por qué mi comando ExecStart falla si en la terminal funciona?

    systemd ejecuta el comando directamente, sin shell y sin tu entorno de inicio de sesión. Usa rutas absolutas, evita tuberías, redirecciones, && y ~, define WorkingDirectory y Environment explícitamente, o envuelve el comando en /bin/sh -c '...'. Revisa journalctl -u nombre.service para ver el error exacto.

    ¿Qué Type debo elegir?

    Usa simple (o exec) para programas que se quedan en primer plano, lo que cubre la mayoría de las aplicaciones modernas. Usa forking solo para demonios antiguos que se bifurcan en segundo plano, idealmente con PIDFile. notify es para programas que llaman a sd_notify cuando están listos, y oneshot es para scripts que se ejecutan una vez y terminan, a menudo con RemainAfterExit=yes.

    ¿Cómo paso variables de entorno o secretos?

    Usa líneas Environment=CLAVE=valor (entrecomilla toda la asignación cuando el valor tenga espacios) para ajustes normales. Para contraseñas y tokens usa EnvironmentFile=/etc/nombre/env con permisos 600, porque cualquier usuario del sistema puede leer los archivos de unidad.

    ¿Qué hacen las opciones de endurecimiento?

    Aíslan el servicio: NoNewPrivileges bloquea la escalada de privilegios, PrivateTmp le da su propio /tmp, ProtectSystem y ProtectHome hacen que las carpetas del sistema sean de solo lectura u ocultas, y las opciones Protect/Restrict bloquean el ajuste del kernel, la carga de módulos y acciones similares. Ejecuta systemd-analyze security nombre.service para ver una puntuación de exposición y prueba el servicio después de cada cambio.

    ¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

    Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

    Herramientas relacionadas

    Ver todas las de Generadores de código →