[FIXED] Mejora script nodered.sh para detección y terminación de procesos
- Corregido problema al detener Node-RED cuando el PID file no existe - Implementada búsqueda avanzada de procesos node-red activos - Mejorado status para detectar procesos sin archivo PID - Añadida información detallada sobre procesos node-red en ejecución - Optimizada función restart para garantizar terminación completa - Mejor manejo de errores y mensajes de estado 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
56fc09621c
commit
5310adb62c
1 changed files with 110 additions and 31 deletions
141
bin/nodered.sh
141
bin/nodered.sh
|
@ -130,39 +130,76 @@ start() {
|
|||
}
|
||||
|
||||
stop() {
|
||||
if [ ! -f "$PID_FILE" ] || ! kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
|
||||
echo "Node-RED no está en ejecución."
|
||||
# Verificar primero si el archivo PID existe y corresponde a un proceso válido
|
||||
if [ -f "$PID_FILE" ] && kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
|
||||
echo "Deteniendo Node-RED (PID $(cat $PID_FILE))..."
|
||||
local PID=$(cat "$PID_FILE")
|
||||
|
||||
# Enviar señal SIGTERM para terminar amigablemente
|
||||
kill "$PID"
|
||||
|
||||
# Esperar hasta 10 segundos para que el proceso termine
|
||||
for i in {1..10}; do
|
||||
if ! kill -0 "$PID" 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
|
||||
# Si aún está en ejecución, forzar la terminación
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "Forzando terminación..."
|
||||
kill -9 "$PID"
|
||||
fi
|
||||
|
||||
rm -f "$PID_FILE"
|
||||
echo "Node-RED detenido correctamente."
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Si el archivo PID no existe o no es válido, buscar procesos de Node-RED
|
||||
local NR_PIDS=$(pgrep -f "node-red" | tr "\n" " ")
|
||||
|
||||
if [ -n "$NR_PIDS" ]; then
|
||||
echo "Encontrados procesos Node-RED sin archivo PID: $NR_PIDS"
|
||||
echo "Deteniendo procesos Node-RED..."
|
||||
|
||||
for pid in $NR_PIDS; do
|
||||
echo "Deteniendo proceso $pid..."
|
||||
kill $pid
|
||||
|
||||
# Esperar a que termine
|
||||
for i in {1..5}; do
|
||||
if ! kill -0 $pid 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
|
||||
# Forzar terminación si es necesario
|
||||
if kill -0 $pid 2>/dev/null; then
|
||||
echo "Forzando terminación del proceso $pid..."
|
||||
kill -9 $pid
|
||||
fi
|
||||
done
|
||||
|
||||
# Limpiar archivos PID huérfanos si existen
|
||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deteniendo Node-RED (PID $(cat $PID_FILE))..."
|
||||
local PID=$(cat "$PID_FILE")
|
||||
|
||||
# Enviar señal SIGTERM para terminar amigablemente
|
||||
kill "$PID"
|
||||
|
||||
# Esperar hasta 10 segundos para que el proceso termine
|
||||
for i in {1..10}; do
|
||||
if ! kill -0 "$PID" 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
|
||||
# Si aún está en ejecución, forzar la terminación
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "Forzando terminación..."
|
||||
kill -9 "$PID"
|
||||
echo "Node-RED detenido correctamente."
|
||||
return 0
|
||||
fi
|
||||
|
||||
rm -f "$PID_FILE"
|
||||
echo "Node-RED detenido correctamente."
|
||||
# Si no hay procesos de Node-RED en ejecución
|
||||
echo "Node-RED no está en ejecución."
|
||||
# Limpiar archivos PID huérfanos si existen
|
||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
||||
return 1
|
||||
}
|
||||
|
||||
status() {
|
||||
# Primera verificación: archivo PID existe y el proceso está en ejecución
|
||||
if [ -f "$PID_FILE" ] && kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
|
||||
echo "Node-RED está en ejecución:"
|
||||
echo " - PID: $(cat $PID_FILE)"
|
||||
|
@ -184,17 +221,59 @@ status() {
|
|||
echo " - Estado: Proceso en ejecución pero no responde HTTP"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Node-RED no está en ejecución."
|
||||
# Limpiar archivos PID huérfanos si existen
|
||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Segunda verificación: buscar procesos de Node-RED sin archivo PID
|
||||
local NR_PIDS=$(pgrep -f "node-red" | tr "\n" " ")
|
||||
|
||||
if [ -n "$NR_PIDS" ]; then
|
||||
echo "Node-RED está en ejecución, pero sin archivo PID correcto:"
|
||||
|
||||
for pid in $NR_PIDS; do
|
||||
echo " - PID: $pid"
|
||||
|
||||
# Mostrar información adicional si está disponible
|
||||
if command -v ps &>/dev/null; then
|
||||
local cmd_line=$(ps -p $pid -o cmd= 2>/dev/null)
|
||||
[ -n "$cmd_line" ] && echo " - Comando: $cmd_line"
|
||||
|
||||
local start_time=$(ps -p $pid -o lstart= 2>/dev/null)
|
||||
[ -n "$start_time" ] && echo " - Iniciado: $start_time"
|
||||
fi
|
||||
done
|
||||
|
||||
echo " - URL: http://localhost:$NODE_RED_PORT (probable)"
|
||||
|
||||
# Verificar si el servicio está realmente respondiendo
|
||||
if command -v curl &>/dev/null; then
|
||||
if curl -s "http://localhost:$NODE_RED_PORT" >/dev/null; then
|
||||
echo " - Estado: Respondiendo"
|
||||
else
|
||||
echo " - Estado: Proceso en ejecución pero no responde HTTP"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "NOTA: Ejecute 'stop' y 'start' para regenerar el archivo PID correcto."
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Si no se encontró ningún proceso
|
||||
echo "Node-RED no está en ejecución."
|
||||
# Limpiar archivos PID huérfanos si existen
|
||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
||||
return 1
|
||||
}
|
||||
|
||||
restart() {
|
||||
echo "Reiniciando Node-RED..."
|
||||
stop
|
||||
sleep 2
|
||||
# Asegurar que todos los procesos node-red estén detenidos
|
||||
if pgrep -f "node-red" > /dev/null; then
|
||||
echo "Todavía hay procesos Node-RED en ejecución. Intentando forzar terminación..."
|
||||
pkill -9 -f "node-red"
|
||||
sleep 2
|
||||
fi
|
||||
start
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue