systemadmin.es > Distribuciones > systemd: Reinicio automático en caso de fallo del daemon

systemd: Reinicio automático en caso de fallo del daemon

Si usamos systemd, tenemos muy fácil controlar el reinicio automático de los servicios, vamos a ver un ejemplo con named:

Las opciones de systemd que controlan el reinicio automático son:

  • Restart: Controla en que condiciones se reinicia:
    • no: No se reinicia nunca
    • >on-success: Se reinicia cuando el proceso devuelve 0, por lo tanto un apagado normal
    • on-failure: Se reinicia cuando el proceso termina y devuelve un valor diferente a 0, llega a un timeout mientras se hace un reload o a un timeout del watchdog si se tiene configurado uno
    • on-watchdog: Se reinicia únicamente cuando llega a un timeout del watchdog
    • always: En cualquier caso se reinicia
  • RestartSec: Tiempo que va a esperar antes de volver a lanzar el proceso, por defecto en segundos pero podemos indicar unidades, por ejemplo, “5m

Para añadirlo a algún proceso, por ejemplo al named editaremos su fichero de configuración, en este caso /usr/lib/systemd/system/named.service y añadiremos las opciones dentro de la sección Service:

[Service]

(...)

Restart=always
RestartSec=1

Podemos comprobar su funcionamiento mediante status:

# systemctl status named
named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
   Active: active (running) since Sun 2014-11-16 23:29:04 CET; 6s ago
  Process: 11701 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 11698 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=exited, status=0/SUCCESS)
 Main PID: 11702 (named)
   CGroup: /system.slice/named.service
           ââ11702 /usr/sbin/named -u named

Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: managed-keys-zone: journal file is out of date: removing journal file
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: managed-keys-zone: loaded serial 5
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: zone 0.in-addr.arpa/IN: loaded serial 0
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: zone localhost/IN: loaded serial 0
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: zone localhost.localdomain/IN: loaded serial 0
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: all zones loaded
Nov 16 23:29:04 kellicam.systemadmin.es named[11702]: running
Nov 16 23:29:04 kellicam.systemadmin.es systemd[1]: Started Berkeley Internet Name Domain (DNS).

Probamos matando el servicio:

# pkill named

Y repetimos el status:

# systemctl status named
named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
   Active: active (running) since Sun 2014-11-16 23:29:18 CET; 543ms ago
  Process: 11713 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=1/FAILURE)
  Process: 11726 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 11723 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=exited, status=0/SUCCESS)
 Main PID: 11727 (named)
   CGroup: /system.slice/named.service
           ââ11727 /usr/sbin/named -u named

Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: command channel listening on ::1#953
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: managed-keys-zone: loaded serial 7
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: zone 0.in-addr.arpa/IN: loaded serial 0
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: zone localhost/IN: loaded serial 0
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: zone localhost.localdomain/IN: loaded serial 0
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: all zones loaded
Nov 16 23:29:18 kellicam.systemadmin.es named[11727]: running
Nov 16 23:29:18 kellicam.systemadmin.es systemd[1]: Started Berkeley Internet Name Domain (DNS).

Podemos comprobar como el servicio se ha reiniciado automáticamente:

# ps -fea | grep [n]amed
named    11727     1  0 23:29 ?        00:00:00 /usr/sbin/named -u named

2 comments to “systemd: Reinicio automático en caso de fallo del daemon”

  1. Muy bueno el tip, pero generalmente no se recomieda editar directamente el fichero en /usr/lib/systemd/system sino copiarlo a /etc/systemd/system y editr esa copia, asi ante una actualizacion no pierdes tus cambios.

    Ademas, tengo entendido que a partir de cierta version puedes hacer un include del servicio original en lugar de copiarlo, asi ademas de no perder tus cambios tambien te beneficias de los cambios que se hagan en el original.

    Lamentablemente no tengo a mano a partir de que version de systemd se puede hacer esto.

    Saludos.

  2. Muchas gracias por la aportación, ciertamente una forma mucho más limpia de hacerlo!

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>