[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() {
|
stop() {
|
||||||
if [ ! -f "$PID_FILE" ] || ! kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
|
# Verificar primero si el archivo PID existe y corresponde a un proceso válido
|
||||||
echo "Node-RED no está en ejecución."
|
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
|
# Limpiar archivos PID huérfanos si existen
|
||||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
||||||
exit 1
|
echo "Node-RED detenido correctamente."
|
||||||
fi
|
return 0
|
||||||
|
|
||||||
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
|
fi
|
||||||
|
|
||||||
rm -f "$PID_FILE"
|
# Si no hay procesos de Node-RED en ejecución
|
||||||
echo "Node-RED detenido correctamente."
|
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() {
|
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
|
if [ -f "$PID_FILE" ] && kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
|
||||||
echo "Node-RED está en ejecución:"
|
echo "Node-RED está en ejecución:"
|
||||||
echo " - PID: $(cat $PID_FILE)"
|
echo " - PID: $(cat $PID_FILE)"
|
||||||
|
@ -184,17 +221,59 @@ status() {
|
||||||
echo " - Estado: Proceso en ejecución pero no responde HTTP"
|
echo " - Estado: Proceso en ejecución pero no responde HTTP"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
return 0
|
||||||
echo "Node-RED no está en ejecución."
|
|
||||||
# Limpiar archivos PID huérfanos si existen
|
|
||||||
[ -f "$PID_FILE" ] && rm -f "$PID_FILE"
|
|
||||||
fi
|
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() {
|
restart() {
|
||||||
echo "Reiniciando Node-RED..."
|
echo "Reiniciando Node-RED..."
|
||||||
stop
|
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
|
start
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue