En la compañía en la que estoy trabajando ahora hay un servicio heredado y su script de inicio está usando SysvInit antiguo, pero se está ejecutando sobre systemd (CentOS 7).
Debido a que hay muchos cálculos, este servicio tarda unos 70 segundos en finalizar. No configuré ningún tiempo de espera para systemd, y no cambié las configuraciones predeterminadas en /etc/systemd/system.conf
, pero aún así cuando ejecuto service SERVICE stop
mi servicio se agota el tiempo de espera después de 60 segundos.
Comprobando con journalctl -b -u SERVICE.service
encuentro este registro:
Sep 02 11:27:46 service.hostname systemd[1]: Stopping LSB: Start/Stop
Sep 02 11:28:46 service.hostname SERVICE[24151]: Stopping service: Error code: 255
Sep 02 11:28:46 service.hostname SERVICE[24151]: [FAILED]
Ya intenté cambiar la DefaultTimeoutStopSec
propiedad en /etc/systemd/system.conf
a 90s
, pero el tiempo de espera aún ocurre.
¿Alguien tiene alguna idea de por qué se está agotando el tiempo a los 60? ¿Hay algún otro lugar donde este valor de tiempo de espera esté configurado? ¿Hay alguna manera de verificarlo?
Este servicio se ejecuta con Java 7 y para demonizarlo, utiliza JSVC . Configuré el -wait
parámetro con el valor 120
.
TimeoutSec=infinity
- ¿No sería posible que esto bloqueara un reinicio indefinidamente? ¿Qué pasa si toma "para siempre" para que ese proceso salga? Sugeriría una gran cantidad, como5min
, pero probablemente noinfinity
...systemd
ofertasystemctl edit
(ymask
deshabilitarlas con fuerza bruta, en lugar dedisable
) para ese mismo propósito. Nunca debe editar los archivos en/usr/lib/systemd
.TimeoutSec=infinity
no funcionó aquí, uséTimeOutSec=900
(15 min) y eso salvó mi posterior. - Tenía que corrersystemctl daemon-reload
después, antes de reiniciar el servicio.En ejecución
systemctl show SERVICE_NAME.service -p TimeoutStopUSec
, al menos pude ver el tiempo de espera establecido por systemd para mi servicio.Cambié el script a un archivo de unidad normal para que funcione correctamente.
fuente