#!/bin/bash
# opengnsys.cron - Script para comprobar si los servicios de OpenGnsys están levantados
#                  e iniciarlos automáticamente.
# Nota: este script debe ser lanzado por Cron cada minuto.


# Variables.
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
LOGDIR="$OPENGNSYS/log"
DEFAULTFILE=/etc/default/opengnsys
typeset -i OGCPU	# % uso CPU

# Comprobar servicios que deben estar activos.
[ -f $DEFAULTFILE ] && source $DEFAULTFILE

# Salir si no se debe ejecutar la revisión en el cron.
[ "$RUN_CRONJOB" == "no" ] && exit

# Comprobar si está activo el servidor OpenGnsys.
if [ "$RUN_OGADMSERVER" == "yes" ]; then
	# Parar procesos ogAdmServer si consume más de 90% de CPU.
	OGPID=$(pgrep ogAdmServer)
	OGCPU=$(top -b -n 1 -p $OGPID 2>/dev/null | awk -v p=$OGPID '$1~p {printf "%d",$9}')
	if [ $OGCPU -gt 90 ]; then
		date +"%d/%m/%Y %H:%M AVISO: ogAdmServer (PID=$OGPID) parado, consumiendo $OGCPU % de CPU" >> $LOGDIR/ogAdmServer.log
		kill -9 $OGPID
	fi
	# Reiniciar servicios si proceso ogAdmServer está caído.
	if ! pgrep ogAdmServer >/dev/null; then
		date +"%d/%m/%Y %H:%M ERROR: El servicio ogAdmServer  estaba caido, se reinicia" >> $LOGDIR/ogAdmServer.log
		/etc/init.d/opengnsys restart
	fi
fi
# Reiniciar servicios si es repositorio y proceso ogAdmRepo está caído.
if [ "$RUN_OGADMREPO" == "yes" -a $(pgrep ogAdmRepo | wc -w) == 0 ]; then
	date +"%d/%m/%Y %H:%M ERROR: El servicio ogAdmRepo estaba caido, se reinicia" >> $LOGDIR/ogAdmRepo.log
	/etc/init.d/opengnsys restart
fi

