GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo configurar un servicio systemd para que se reinicie periódicamente?

Vi una solución aquí que parecía elegante, aunque un poco indirecta. La idea clave es crear un servicio único activado por un temporizador que reinicia otro Servicio.

Para el temporizador:

[Unit]
Description=Do something daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Para el servicio único:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart my_program.service

Para el servicio one-shot en Ubuntu 16.04 LTS:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

Esta solución le permite aprovechar los temporizadores de systemd, incluida la capacidad de reiniciar el servicio en un momento determinado del día, y no solo después de que haya transcurrido una cierta cantidad de tiempo.


Para la versión systemd>=229, hay una opción llamada RuntimeMaxSec , que finaliza el servicio después de que se haya estado ejecutando durante el período de tiempo determinado.

p.ej. Para reiniciar cada 7 días:

[Service]
Restart=always
RuntimeMaxSec=7d

A mí esto me parece más elegante que abusar de Type=notify y WatchdogSec .

systemd proporciona una forma limpia de agregar y anular directivas en los archivos de unidad systemd proporcionados por los proveedores. Las Unidades Drop-In se describen en man systemd.unit. Por ejemplo, si quisiera reiniciar periódicamente el servicio foo provisto por un paquete, crearía un archivo llamado /etc/systemd/system/foo.service.d/periodic-restart.conf . El contenido sería como se muestra arriba. Entonces:

 systemctl daemon-reload
 systemctl restart foo

Puede confirmar que la unidad Drop-In se ha cargado porque se informará en la salida de estado:

 systemctl status

Finalmente, puede confirmar que la directiva se ha incluido buscando en systemctl show salida:

 systemctl show foo.service | grep RuntimeMax

La directiva reportada por systemctl show será "RuntimeMaxUSec`


Linux
  1. ¿Cómo configurar Systemd para convertir un script simple con Standardio en un servicio de red?

  2. ¿Cómo usar Systemd para reiniciar un servicio cuando está inactivo?

  3. Cómo redirigir la salida del servicio systemd a un archivo

  4. Cómo detener el servicio systemd

  5. Cómo eliminar los servicios de systemd

Cómo iniciar, detener o reiniciar Nginx

Comandos Systemctl para administrar el servicio Systemd

Cómo iniciar, detener o reiniciar servicios en CentOS 8

Cómo reiniciar un servicio a través de systemctl bajo Linux

Cómo reiniciar servicios en la línea de comandos de Ubuntu

Cómo usar systemctl en Linux