opengnsys-1.1.0 (#14) - [Sugerencia] Evitar ejecutar scripts de cron si el servicio OpenGnsys se ha detenido deliberadamente (#363) - Message List

[Sugerencia] Evitar ejecutar scripts de cron si el servicio OpenGnsys se ha detenido deliberadamente
 unsolved

Hola a todos. En mi instalación de OpenGnsys, el servidor se quedada colgado en los apagados/reinicios debido a ficheros abiertos en la partición montada en /opt. Eso a pesar de que el servicio OpenGnsys se había parado previamente.

Mi servidor es Debian stretch siendo obtenido el dispositivo que contiene la instalación de OpenGnsys vía Ceph RBD. No sé si los problemas que voy a comentar suceden también cuando los montajes se hacen en dispositivos locales.

Los scripts de OpenGnsys que se llaman vía cron, especialmente torrent-tracker, ejecutan demonios cuyos pids no quedan reflejados en los ficheros /var/run/*.pid. Por ello a la hora de efectuar el apagado/reinicio, el script /etc/init.d/opengnsys no puede matar todos los demonios que previamente arrancó ya que los pids han cambiado. Mi servidor se queda indefinidamente intentando acceder al directorio /opt a pesar de que los demonios de OpenGnsys se han parado.

He modificado los scripts llamados desde cron, para evitar accesos al directorio de montaje /opt cuando se ha parado el servicio y actualizar los ficheros /var/run/*.pid.
Además, he utilizado la variable BTTRACK para llamar al tracker elegido.

/opt/opengnsys/bin/opengnsys.cron

SERVSTATUS=/var/run/opengnsys.stopped
# Evitar chequeo si se ha parado el servicio
[ "$RUN_CRONJOB" == "no" -o -f $SERVSTATUS ] && exit

/opt/opengnsys/bin/torrent-tracker

SERVSTATUS=/var/run/opengnsys.stopped
[ -f $SERVSTATUS ] && exit
...
# Sustituir bttrack por BTTRACK
$BTTRACK $BTTRACK_OPTIONS &>> $BTTRACKLOG
pgrep bttrack > $BTTRACKPID

/etc/init.d/opengnsys

# Evitar arranques vía crontab tras parar el servicio
SERVSTATUS=/var/run/opengnsys.stopped
arranca_demonios() {
  # Comprobar que está instalado OpenGnsys.
  if [ ! -d $BASEDIR ]; then
     $ACTIONMSG "ERROR: No existe el directorio $BASEDIR"
     $FAILMSG
     exit $?
  fi
  [ -f $SERVSTATUS ] && rm -f $SERVSTATUS
...
para_demonios() {
  [ -f $SERVSTATUS ] || touch $SERVSTATUS

Attachments

No attachments created.