Saltar al contenido
ToolMug

Generador de archivos de servicio systemd

Mantén en marcha un programa de Node.js, Python o Go en un servidor Linux, arráncalo con el sistema y reinícialo si se cae, sin tener que recordar todas las opciones de systemd. Rellena el comando y el usuario, elige una política de reinicio y las variables de entorno, y copia el archivo .service junto con los comandos para instalarlo e iniciarlo. Marca Ejecutar con una programación (crear un .timer) para obtener un .timer como alternativa moderna a cron.

Funciona en tu navegador: nada de lo que introduces se sube

Será el nombre del archivo, p. ej. myapp → myapp.service

Usa la ruta completa del programa, p. ej. /usr/bin/python3 app.py

El comando sigue ejecutándose en primer plano (la mayoría de las apps web y scripts).

Una CLAVE=valor por línea; los valores con espacios se entrecomillan por ti.

0 mantiene el valor predeterminado del sistema.

myapp.service

Instalar e iniciar

Pega los comandos en el servidor como root. Tras editar un archivo de unidad, ejecuta de nuevo systemctl daemon-reload. Registros: journalctl -u <name>.

Cómo se usa

  1. Introduce el nombre del servicio, el comando con su ruta completa y el directorio de trabajo.
  2. Define el usuario, la política de reinicio y las variables de entorno que necesites.
  3. Si quieres, añade un refuerzo básico o una programación (OnCalendar) para crear un temporizador.
  4. Copia los archivos generados, o pega los comandos de instalación en una shell de root en el servidor.

Opciones explicadas

Type
simple sirve para programas que se quedan en primer plano; oneshot sirve para scripts que se ejecutan una vez, como las tareas programadas.
Restart
Si falla reinicia el servicio cuando termina con un error o se cae; Siempre lo reinicia también tras una salida normal.
OnCalendar
Cuándo se activa el temporizador, p. ej. daily o *-*-* 03:00:00 para las 3 de la madrugada de cada día. Prueba las expresiones con systemd-analyze calendar.

Ejemplo: una tarea nocturna como temporizador

Para ejecutar un script todas las noches a las 3 de la madrugada, pon el Comando (ExecStart) en /usr/local/bin/backup.sh, el nombre del servicio en backup, Type en oneshot y Restart en Nunca, y marca «Ejecutar con una programación (crear un .timer)» y «refuerzo básico». Con el usuario y el directorio de trabajo por defecto, el generador produce dos archivos. backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only

y backup.timer:

[Unit]
Description=Run backup on a schedule

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

Con un temporizador activado cambian dos cosas. El archivo de servicio pierde su sección [Install], porque es el temporizador quien lo inicia, y los comandos de instalación habilitan el temporizador en lugar del servicio:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f

Al marcar la opción del temporizador, Type no se cambia por ti, así que elige oneshot tú mismo para las tareas que terminan. Un servicio oneshot combinado con Restart Siempre no es válido, por lo que el generador omite Restart y muestra un aviso.

Preguntas frecuentes

¿Dónde pongo el archivo?

En /etc/systemd/system/. Después ejecuta systemctl daemon-reload y systemctl enable --now <name>.service: los comandos generados hacen todo esto.

¿Por qué mi servicio falla con «Executable path is not absolute»?

Las versiones antiguas de systemd necesitan la ruta completa del programa en ExecStart. Búscala con which, p. ej. which node.

¿Temporizador o cron?

Los temporizadores escriben en el journal, pueden recuperar las ejecuciones perdidas mientras el servidor estaba apagado y nunca se ejecutan dos veces a la vez. cron es más sencillo para comandos de una línea y sigue funcionando bien.

Privacidad

Esta herramienta funciona por completo en tu navegador. Tus archivos y textos se procesan en tu dispositivo y nunca se suben a nuestros servidores.

Herramientas relacionadas