Cómo se usa
- Introduce el nombre del servicio, el comando con su ruta completa y el directorio de trabajo.
- Define el usuario, la política de reinicio y las variables de entorno que necesites.
- Si quieres, añade un refuerzo básico o una programación (OnCalendar) para crear un temporizador.
- 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.