No detiene el proceso ¿Falata libreria?
Bueno estoy probando diversos script los cuales los use mucho tiempo bajo centOS pero ahora estoy con debian y solo tengo un error el STOP, este no me detiene el proceso solo borra los archivos y todo pero no elimina el proceso.
NAME="20000"
USUARIO="apache"
DIR="/opt/servidores/cod2"
EJECUTABLE="cod2_lnxded"
CFG=$NAME
PARAMS=""
MYEXECMD="./$EJECUTABLE $PARAMS &> /dev/null"
#Directorios de Logs del script
MYLOGFILE="$DIR/logs/$CFG.log"
MYLOCKFILE="$DIR/logs/$CFG.lock"
# MAXLOGSIZE es el tamano maximo permitido en kB para un archivo de Logs y es revisado por "check" automatica o manualmente
# Si el tamano del archivo intenta pasar este valor, se invocara logrotate
# Para deshabilitarlo setearlo a 0 y para rotar logs se debera invocar logrotate manualmente
MAXLOGSIZE=1024
# MAXLOGFILES es el numero maximo de archivos de Logs que se guardaran en rotacion por logrotate
# Si se deshabilita (=0) no quedaran archivos de Logs
MAXLOGFILES=4
# MONITORFREQ es el tiempo en segundos que demorara "check" en ser invocado automaticamente por el loop "infinity"
# Valor sugerido: 60 (valores muy pequeos pueden generar errores)
MONITORFREQ=60
# BROKENCPUTIME es el porcentaje de CPU en que el proceso puede declararse "colgado"
# El % de CPU en uso se chequea mediante el comando ps en 2 oportunidades
# Si en las 2 oportunidades el proceso aun esta por sobre este valor sera invocado un "restart"
# El valor debe ser inferior a 100, sugerido 99 y deshabilitado 0
# Algunos procesos nunca tomaran 99% de CPU aunque esten muy "colgados" asi que se debe jugar con este valor hasta encontrar el optimo
# set to 0 to disable, must be below 100; suggested value: 99
# OJO: valores muy bajos haran reiniciar el proceso inneceariamente
BROKENCPUTIME=40
# LOGSPAMCHECK es usado para detectar si el proceso se encuentra en un loop equivocado
# Esto sucede cuando el mismo mensaje en enviado a los Logs repetidas veces y cuando sucede esto el proceso debe ser reiniciado
# Valores: 0 apagado y 1 habilitado
LOGSPAMCHECK=1
######################################################
#
# No se require modificacion de lo siguiente, salvo la
# linea MYEXEC que iniciara el proceso en base a las
# variables
#
######################################################
WriteToLog ()
{
TIME=$(date +"%Y-%m-%d %H:%M:%S")
$SUID "echo \"[$TIME] $CFG: $1\" >> $MYLOGFILE"
}
if [ ! -d "$DIR" ]; then
echo "ERROR: No encuentro el directorio principal $DIR"
exit -2
fi
if [ ! -d "$DIR/logs" ]; then
echo "ERROR: No encuentro el directorio logs en $DIR"
exit -2
fi
ulimit -c 0
OUTLOG="$MYLOGFILE"
SUID="bash -c"
case "$1" in
start)
$0 soft-start
$0 infinity &
;;
stop)
if [ -f "$MYLOCKFILE.8" ]; then
# termina "infinity" borrando el archivo lock
rm -f $MYLOCKFILE.8
fi
$0 soft-stop
;;
restart)
$0 stop
$0 start
;;
soft-start)
echo -n "Iniciando $EJECUTABLE: "
if [ -f $MYLOCKFILE ]; then
echo "El proceso ya esta en marcha. No iniciado."
else
$0 logrotate >/dev/null
cd $DIR
WriteToLog "soft-start"
$SUID "$MYEXECMD >> $OUTLOG & echo \$! > $MYLOCKFILE"
echo "$CFG"
fi
;;
soft-stop)
echo -n "Deteniendo $EJECUTABLE: "
if [ ! -f $MYLOCKFILE ]; then
echo "no encontrado"
exit -4
fi
WriteToLog "soft-stop"
kill -TERM $(cat $MYLOCKFILE)
rm -f "$MYLOCKFILE"
echo "$CFG"
;;
soft-restart)
if [ -f $MYLOCKFILE ]; then
$0 soft-stop
fi
$0 soft-start
;;
infinity)
# "infinity" -- este comando es utilizado para iniciar un loop infinito
# y asegurar que el proceso siempre este UP sin utilizar CRON
$SUID "echo $$ > $MYLOCKFILE.8"
# Al correr "check" se asegurara de que cualquier PID anterior fue matado
# antes de reiniciar el server
while [ -f $MYLOCKFILE.8 -a "$$" = "$(cat $MYLOCKFILE.8 2>/dev/null)" ]; do
$0 check
sleep $MONITORFREQ
done
;;
check)
# Revisando si el proceso "esta vivo"
PROC=$(cat $MYLOCKFILE 2>/dev/null)
if [ -z "$(ps -p $PROC 2>/dev/null | grep $EJECUTABLE)" ]; then
WriteToLog "Reiniciando ya que el PID murio"
$0 soft-restart
exit 1
fi
# Revisando si el proceso esta "chupando" mucha CPU (colgado)
if [ $BROKENCPUTIME -gt 0 ]; then
CPUTIME=0$(ps auxw | sed -n -e "s/^$USUARIO\ *$PROC\ *\([0-9]*\).*$/\1/"p)
if [ $CPUTIME -ge $BROKENCPUTIME ]; then
WriteToLog "El uso de CPU esta sobre $BROKENCPUTIME < $CPUTIME (Consumo actual $CPUTIME)"
WriteToLog "esperando $MONITORFREQ segundos mas para ver si cambia su condicion"
sleep $MONITORFREQ
CPUTIME=0$(ps auxw | sed -n -e "s/^$USUARIO\ *$PROC\ *\([0-9]*\).*$/\1/"p)
WriteToLog "Uso de CPU = $CPUTIME"
if [ $CPUTIME -ge $BROKENCPUTIME ]; then
$0 soft-restart
exit 1
fi
fi
fi
# Revisando si es necesario logrotate
if [ $MAXLOGSIZE -gt 0 ]; then
LOGSIZE=0$(ls -sk $MYLOGFILE | sed -n 's/^\([0-9]*\).*$/\1/p')
if [ $LOGSIZE -gt $MAXLOGSIZE ]; then
if [ $LOGSPAMCHECK = "1" -a $LOGSIZE -gt $(($MAXLOGSIZE + 1024)) ]; then
WriteToLog "Reiniciando ya que el tamano del log esta por sobre 1MB de MAXLOGSIZE"
$0 soft-restart
else
$0 logrotate
fi
fi
fi
;;
logrotate)
if [ -s "$MYLOGFILE" ]; then
if [ $MAXLOGFILES -gt 0 ]; then
WriteToLog "Rotando logs..."
COUNT=$MAXLOGFILES
NEXTLOG="$MYLOGFILE.$COUNT"
COUNT=$(($COUNT - 1))
PREVLOG="$MYLOGFILE.$COUNT"
while [ $COUNT -gt 0 ]; do
if [ -f "$PREVLOG" ]; then
$SUID "mv $PREVLOG $NEXTLOG"
fi
NEXTLOG=$PREVLOG
COUNT=$(($COUNT - 1))
PREVLOG="$MYLOGFILE.$COUNT"
done
$SUID "cp $MYLOGFILE $NEXTLOG"
else
WriteToLog "Rotando logs... -- MAXLOGFILES no esta seteado -- archivo log no guardado!!"
fi
$SUID "cat /dev/null > $MYLOGFILE"
else
WriteToLog "Rotando logs... -- MYLOGFILE esta vacio -- no se rota!"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|check|logrotate}"
exit -1
esac
exit 0
Espero que me puedan ayudar.
- Inicie sesión o regístrese para enviar comentarios
- 437 lecturas


WriteToLog "soft-stop"
kill -TERM $(cat $MYLOCKFILE)
rm -f "$MYLOCKFILE"
echo "$CFG"
No uses -TERM, usa algo mas "agresivo":
kill -9