Compare commits

..

9 commits

Author SHA1 Message Date
35c2216df3
[IMPROVED] Actualización de versión a 1.3.0 en todos los scripts
- Actualizada la versión en los siguientes scripts:
  - nodered.sh
  - ollama.sh
  - ollama_up.sh
  - ollama_down.sh
  - vpn_check.sh
- Consistencia de versión entre todos los componentes del proyecto

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 13:04:39 -05:00
cc39859c40
[DOCS] Actualización de CHANGELOG para versión 1.3.0
- Documentados todos los cambios significativos de la versión 1.3.0
- Añadidas nuevas funcionalidades: scripts de Ollama, Node-RED y VPN
- Detalladas mejoras en robustez y manejo de errores
- Listadas correcciones importantes realizadas
- Actualizada información sobre documentación y sistema de mensajes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 13:01:36 -05:00
79aeb54260
[IMPROVED] Actualización a versión 1.3.0
- Incrementada versión a 1.3.0 por nuevas funcionalidades y mejoras
- Actualizados badges en README.md con nueva distribución de código
- Actualizado archivo de versión en config/version

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:59:38 -05:00
2af72ba7f3
[DOCS] Actualización de README con información sobre mensajes internacionalizados
- Mejorada la descripción de nodered.sh con gestión completa de servicio
- Añadida información sobre el sistema de mensajes con prefijos específicos
- Incluidos nuevos componentes del sistema: Gestión de Servicios e Integración con IA
- Añadidas instrucciones para internacionalización en la sección de Contribución
- Actualizada documentación con las mejores prácticas para nuevos scripts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:52:18 -05:00
2b9a62eb8a
[ADDED] Mensajes internacionalizados para nodered.sh
- Añadidos 58 mensajes para Node-RED en el archivo developers.es
- Implementado sistema de mensajes con prefijo nrmsg_
- Actualizada carga de mensajes en nodered.sh
- Comenzada integración de mensajes en el script
- Preparado para soporte multilingüe completo

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:48:27 -05:00
fa0a5563c5
[FIXED] Corrección para package.json vacío en script nodered.sh
- Añadida verificación de package.json vacío o inválido
- Implementada eliminación automática de archivos package.json problemáticos
- Mejorada función install_deps para manejo robusto de dependencias
- Añadido respaldo automático de archivos dañados
- Añadida inicialización de package.json cuando no existe
- Mejorada verificación de instalación exitosa de Node-RED

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:45:09 -05:00
89daa56b46
[FIXED] Solución robusta para detención de Node-RED
- Reescrita la función stop para garantizar terminación completa de todos los procesos
- Implementado mecanismo jerárquico de terminación: amigable → forzado → último recurso
- Añadidos pasos de verificación adicionales para procesos persistentes
- Mejorada función restart con múltiples intentos de terminación
- Limpieza de archivos temporales y sockets para evitar conflictos
- Mejor retroalimentación sobre procesos Node-RED en varios estados

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:37:39 -05:00
5310adb62c
[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>
2025-03-23 12:34:15 -05:00
56fc09621c
[IMPROVED] Script nodered.sh para gestión avanzada de Node-RED
- Mejorada verificación de tipo de proyecto (nodejs)
- Añadido soporte para directorio de datos separado (.node-red)
- Mejorada función start para verificar dependencias e instalación automática
- Añadida detección de inicio completo del servicio
- Mejorada gestión del proceso, apagado ordenado y limpieza PID
- Detallado status con información de PID, URL, logs y estado HTTP
- Nuevas funciones: restart, install_deps para módulos comunes y logs
- Mejor documentación e interfaz de uso
- Actualizado README.md con entrada para nodered.sh

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-23 12:28:36 -05:00
9 changed files with 546 additions and 18 deletions

View file

@ -7,6 +7,41 @@ y el proyecto adhiere a [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
## [Unreleased]
## [1.3.0] - 2025-03-23
### Añadido
- Nuevos scripts para gestión del servicio Ollama:
- `ollama_up.sh` para iniciar el servicio Ollama con podman-compose
- `ollama_down.sh` para detener el servicio Ollama
- `ollama.sh` cliente para interactuar con Ollama (auto-inicia el servicio si es necesario)
- Nuevo script `nodered.sh` para administración completa de Node-RED:
- Soporte para iniciar, detener, reiniciar y verificar estado del servicio
- Instalación automática de dependencias y módulos comunes
- Monitoreo en tiempo real de logs y procesos
- Script `vpn_check.sh` para verificar y mostrar información de conexiones VPN
- Funciones en base.lib para detección de VPN:
- `is_connected_to_vpn()` para verificar si existe una conexión VPN activa
- `get_vpn_type()` para identificar el tipo específico de VPN (Pritunl, OpenVPN, etc.)
- Sistema de mensajes internacionalizados para Node-RED con prefijo `nrmsg_`
### Mejorado
- Robustez en scripts de gestión de servicios con mejor manejo de errores
- Verificación de package.json en proyectos Node.js y corrección automática si está vacío
- Detección mejorada de procesos persistentes en servicios
- Sistema de mensajes con prefijos específicos por herramienta para mejor organización
- Documentación expandida sobre internacionalización y contribución
### Corregido
- Problemas al detener servicios Node-RED cuando el PID file no existe
- Manejo de package.json vacío o inválido en proyectos Node.js
- Detección de Pritunl VPN para distinguirlo correctamente de OpenVPN
### Documentación
- Adición de nuevas herramientas al README.md
- Instrucciones para internacionalización de scripts
- Actualización de componentes principales del sistema
- Descripción del sistema de mensajes con prefijos específicos
## [1.2.0] - 2025-03-19
### Añadido

View file

@ -2,13 +2,13 @@
<p align="center">
<img src="https://img.shields.io/badge/License-AGPL--3.0-blue.svg" alt="License: AGPL-3.0">
<img src="https://img.shields.io/badge/version-1.2.0-green.svg" alt="Version: 1.2.0">
<img src="https://img.shields.io/badge/version-1.3.0-green.svg" alt="Version: 1.3.0">
</p>
<p align="center">
<img src="https://img.shields.io/badge/Shell-78%25-yellow.svg" alt="Shell: 78%">
<img src="https://img.shields.io/badge/Shell-80%25-yellow.svg" alt="Shell: 80%">
<img src="https://img.shields.io/badge/Python-5%25-blue.svg" alt="Python: 5%">
<img src="https://img.shields.io/badge/Bash_Lib-15%25-orange.svg" alt="Bash Lib: 15%">
<img src="https://img.shields.io/badge/Bash_Lib-13%25-orange.svg" alt="Bash Lib: 13%">
<img src="https://img.shields.io/badge/Config-2%25-lightgrey.svg" alt="Config: 2%">
</p>
@ -70,6 +70,7 @@ bin/update.sh
| `bin/ollama_up.sh` | Inicia el servicio Ollama (IA local) con podman-compose |
| `bin/ollama_down.sh` | Detiene el servicio Ollama (IA local) |
| `bin/ollama.sh` | Cliente para interactuar con Ollama (auto-inicia el servicio si es necesario) |
| `bin/nodered.sh` | Administra Node-RED con soporte para ejecución, monitoreo y gestión completa del servicio |
### Herramientas para Editores de Código
@ -402,11 +403,13 @@ bin/
### Componentes Principales
- **Bibliotecas Base**: Conjunto de funciones reutilizables (`base.lib`, `bootstrap.lib`, `developers.lib`, `console.lib`, etc.)
- **Sistema de Mensajes**: Soporte multilingüe para internacionalización
- **Sistema de Mensajes**: Soporte multilingüe para internacionalización con prefijos específicos por herramienta
- **Gestión de Configuración**: Archivos de configuración centralizados, plantillas .gitignore por tipo de proyecto
- **Herramientas de Automatización**: Scripts y playbooks de Ansible
- **Gestión de Servicios**: Administración de servicios locales como Node-RED, Ollama y más
- **Creación de Proyectos**: Sistema estandarizado de plantillas para diversos tipos de proyectos
- **Backup y Seguridad**: Herramientas para respaldar configuraciones de desarrollador
- **Integración con IA**: Múltiples herramientas para trabajar con proveedores de IA, tokens y modelos locales
## 💻 Compatibilidad
@ -423,6 +426,7 @@ El proyecto está diseñado para funcionar en múltiples sistemas operativos:
Para contribuir al proyecto:
1. Asegúrese de seguir las convenciones de codificación
2. Use los mensajes de commit con prefijos estándar:
- `[ADDED]` - Nueva funcionalidad añadida
- `[IMPROVED]` - Mejora en funcionalidad existente
@ -432,19 +436,21 @@ Para contribuir al proyecto:
- `[INIT]` - Inicialización de proyecto o componente
- `[REFACTORED]` - Reestructuración de código sin cambios funcionales
- `[MODIFIED]` - Cambios menores o ajustes
3. Para scripts bash, use la plantilla de encabezado que está en `bin/config/bash.header`:
```bash
#!/bin/bash
#
# Script: nombre_archivo.sh
# Description: Breve descripción del script
# Created: YYYY/MM/DD HH:MM:SS
# Modified: YYYY/MM/DD HH:MM:SS
# [Author] Su Nombre <su.email@ejemplo.com>
#
# Derechos de Autor (C) [YYYY] [Su Nombre <su.email@ejemplo.com>]
#Script : [Bash Script Name]
#Apps : MRDEVS TOOLS
#Description : [Bash Script Description]
#Author : [Bash Script Author]
#Company Email : [Company Email Author's]
#Personal Email : [Personal Email Author's]
#Created : [Created Date/Time]
#Modified : [Modified Date/Time]
#Version : [Apps Version]
#Use Notes :
```
4. Documente cualquier nueva funcionalidad añadida
## 📄 Licencia

View file

@ -1 +1 @@
1.2.0
1.3.0

View file

@ -11,6 +11,66 @@
#==============================================================================
#==============================================================================
# Mensajes para Node-RED
nrmsg_000="GESTOR DE NODE-RED"
nrmsg_001="Node-RED ya está en ejecución (PID %s)"
nrmsg_002="Abre http://localhost:%s en tu navegador"
nrmsg_003="Error: Node.js y npm son requeridos pero no están instalados."
nrmsg_004="Instala Node.js con el comando: bin/npm_install.sh"
nrmsg_005="ADVERTENCIA: Archivo package.json está vacío. Eliminándolo..."
nrmsg_006="ADVERTENCIA: Archivo package.json contiene JSON inválido. Haciendo copia de seguridad..."
nrmsg_007="Node-RED no está instalado. Instalando localmente..."
nrmsg_008="Error al instalar Node-RED. Verifica tu conexión a internet."
nrmsg_009="Iniciando Node-RED en el puerto %s..."
nrmsg_010="Iniciando Node-RED (PID %s)..."
nrmsg_011="Esperando a que el servicio esté disponible..."
nrmsg_012="Node-RED iniciado correctamente."
nrmsg_013="Node-RED parece estar tardando en iniciar. Verifica %s para más detalles."
nrmsg_014="Si todo está bien, abre http://localhost:%s en tu navegador"
nrmsg_015="Deteniendo Node-RED..."
nrmsg_016="Buscando procesos Node-RED..."
nrmsg_017="Terminando procesos Node-RED: %s"
nrmsg_018="Enviando SIGTERM al proceso %s..."
nrmsg_019="Algunos procesos persisten. Forzando terminación (SIGKILL)..."
nrmsg_020="Forzando terminación del proceso %s..."
nrmsg_021="ADVERTENCIA: Algunos procesos de Node-RED aún persisten: %s"
nrmsg_022="Puede ser necesario reiniciar el sistema para liberarlos completamente."
nrmsg_023="Usando archivo PID: %s"
nrmsg_024="PID válido encontrado: %s"
nrmsg_025="Archivo PID existe pero el proceso no está activo"
nrmsg_026="ERROR: No se pudo detener completamente Node-RED."
nrmsg_027="Verifique manualmente los procesos con: ps aux | grep node-red"
nrmsg_028="Node-RED detenido correctamente."
nrmsg_029="No se encontraron procesos de Node-RED en ejecución."
nrmsg_030="Node-RED está en ejecución:"
nrmsg_031="Node-RED está en ejecución, pero sin archivo PID correcto:"
nrmsg_032="NOTA: Ejecute 'stop' y 'start' para regenerar el archivo PID correcto."
nrmsg_033="Node-RED no está en ejecución."
nrmsg_034="Reiniciando Node-RED..."
nrmsg_035="Intento adicional %s: Forzando terminación de procesos persistentes..."
nrmsg_036="ADVERTENCIA: No fue posible detener completamente Node-RED."
nrmsg_037="Los nuevos procesos podrían comportarse de manera inesperada."
nrmsg_038="Instalando dependencias de Node-RED..."
nrmsg_039="ADVERTENCIA: Archivo package.json está vacío. Eliminándolo para una instalación limpia..."
nrmsg_040="Inicializando package.json..."
nrmsg_041="Instalando Node-RED..."
nrmsg_042="Instalando módulos adicionales para Node-RED..."
nrmsg_043="Node-RED instalado correctamente."
nrmsg_044="ADVERTENCIA: Hubo problemas instalando Node-RED."
nrmsg_045="Todas las dependencias instaladas. Use './nodered.sh start' para iniciar el servidor."
nrmsg_046="Mostrando las últimas líneas del log (Ctrl+C para salir):"
nrmsg_047="Contenido del archivo de log:"
nrmsg_048="No hay archivo de log disponible."
nrmsg_049="Node-RED Administración"
nrmsg_050="Uso: %s {start|stop|restart|status|install|logs}"
nrmsg_051="Comandos:"
nrmsg_052=" start - Inicia el servidor Node-RED"
nrmsg_053=" stop - Detiene el servidor Node-RED"
nrmsg_054=" restart - Reinicia el servidor Node-RED"
nrmsg_055=" status - Muestra el estado del servidor"
nrmsg_056=" install - Instala/actualiza Node-RED y dependencias comunes"
nrmsg_057=" logs - Muestra los logs en tiempo real"
# Mensajes para aider_install.sh
aimsg_000="INSTALACIÓN DE AIDER"
aimsg_001="Error: Python 3 no está instalado."

427
bin/nodered.sh Executable file
View file

@ -0,0 +1,427 @@
#!/bin/bash
#Script : nodered.sh
#Apps : MRDEVS TOOLS
#Description : Inicia y Detiene el servicio de Nodered
#Author : Mauro Rosero Pérez
#Company Email : mauro@rosero.one
#Personal Email : mauro.rosero@gmail.com
#Created : 2024/12/01 15:27:00
#Modified : 2025/03/19 11:57:08
#Version : 1.3.0
#==============================================================================
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
#==============================================================================
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Configuración inicial
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_PATH=$BIN_HOME/$BIN_BASE
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
if [ -f "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" ]; then
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Cargar mensajes específicos de NodeRED
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
title="${head_000} ${head_002} - ${nrmsg_000}"
fi
# Verificar si es un proyecto de desarrollo y de tipo NodeJS
if [ ! -f "$PWD/.protype" ]; then
echo "${head_noproject}"
exit 1
fi
if [ "$(cat "$PWD/.protype")" != "nodejs" ]; then
echo "${head_002} ${head_warning}: Este script está diseñado para proyectos NodeJS."
read -p "¿Desea continuar de todos modos? (s/N): " CONTINUE
if [[ ! "$CONTINUE" =~ ^[Ss]$ ]]; then
echo "Operación cancelada."
exit 1
fi
fi
# Configuración de Node-RED
NODE_RED_DIR="$PWD"
NODE_RED_DATA="$NODE_RED_DIR/.node-red"
NODE_RED_PORT=${NODE_RED_PORT:-1880}
NODE_RED_CMD="npx node-red -u $NODE_RED_DATA -p $NODE_RED_PORT"
PID_FILE="$NODE_RED_DIR/nodered.pid"
LOG_FILE="$NODE_RED_DIR/nodered.log"
CONFIG_FILE="$NODE_RED_DATA/settings.js"
# Crear directorio de datos si no existe
mkdir -p "$NODE_RED_DATA" 2>/dev/null
start() {
if [ -f "$PID_FILE" ] && kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
printf "${nrmsg_001}\n" "$(cat $PID_FILE)"
printf "${nrmsg_002}\n" "$NODE_RED_PORT"
exit 1
fi
# Verificar si Node.js y npm están instalados
if ! command -v node &> /dev/null || ! command -v npm &> /dev/null; then
echo "Error: Node.js y npm son requeridos pero no están instalados."
echo "Instala Node.js con el comando: bin/npm_install.sh"
exit 1
fi
# Verificar package.json y corregirlo si está vacío o dañado
if [ -f "package.json" ]; then
# Verificar si package.json está vacío o solo contiene espacios/saltos de línea
if [ ! -s "package.json" ] || [ "$(cat package.json | tr -d '[:space:]')" = "" ]; then
echo "ADVERTENCIA: Archivo package.json está vacío. Eliminándolo..."
rm -f "package.json"
else
# Verificar si el archivo es un JSON válido
if ! node -e "try { require('./package.json'); process.exit(0); } catch(e) { console.error('JSON inválido:', e.message); process.exit(1); }" 2>/dev/null; then
echo "ADVERTENCIA: Archivo package.json contiene JSON inválido. Haciendo copia de seguridad y eliminándolo..."
mv "package.json" "package.json.bak.$(date +%Y%m%d%H%M%S)"
fi
fi
fi
# Verificar si node-red está disponible localmente
if ! npm list -g node-red &> /dev/null && ! npm list node-red &> /dev/null; then
echo "Node-RED no está instalado. Instalando localmente..."
npm install --save node-red
if [ $? -ne 0 ]; then
echo "Error al instalar Node-RED. Verifica tu conexión a internet."
exit 1
fi
fi
echo "Iniciando Node-RED en el puerto $NODE_RED_PORT..."
mkdir -p "$NODE_RED_DATA"
nohup $NODE_RED_CMD > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
# Esperar a que Node-RED esté listo
echo "Iniciando Node-RED (PID $(cat $PID_FILE))..."
echo "Esperando a que el servicio esté disponible..."
for i in {1..30}; do
if grep -q "Server now running" "$LOG_FILE" 2>/dev/null; then
echo "Node-RED iniciado correctamente."
echo "Abre http://localhost:$NODE_RED_PORT en tu navegador"
return 0
fi
sleep 1
echo -n "."
done
echo ""
echo "Node-RED parece estar tardando en iniciar. Verifica $LOG_FILE para más detalles."
echo "Si todo está bien, abre http://localhost:$NODE_RED_PORT en tu navegador"
}
stop() {
# Variable para seguir si se detectaron procesos
local found_processes=0
echo "Deteniendo Node-RED..."
# Matar todos los procesos recursivamente y de forma agresiva
kill_all_nodered() {
echo "Buscando procesos Node-RED..."
# Buscar todos los procesos relacionados con Node-RED
local NR_PIDS=$(pgrep -f "node-red" 2>/dev/null || echo "")
# Si no se encontraron procesos
if [ -z "$NR_PIDS" ]; then
return 1
fi
# Procesar cada PID encontrado
found_processes=1
echo "Terminando procesos Node-RED: $NR_PIDS"
# Primera pasada: intento amigable (SIGTERM)
for pid in $NR_PIDS; do
echo "Enviando SIGTERM al proceso $pid..."
kill $pid 2>/dev/null
done
# Esperar un momento
sleep 2
# Segunda pasada: verificar y forzar si es necesario
local REMAINING_PIDS=$(pgrep -f "node-red" 2>/dev/null || echo "")
if [ -n "$REMAINING_PIDS" ]; then
echo "Algunos procesos persisten. Forzando terminación (SIGKILL)..."
for pid in $REMAINING_PIDS; do
echo "Forzando terminación del proceso $pid..."
kill -9 $pid 2>/dev/null
done
# Esperar un poco más
sleep 1
# Verificación final
local FINAL_CHECK=$(pgrep -f "node-red" 2>/dev/null || echo "")
if [ -n "$FINAL_CHECK" ]; then
echo "ADVERTENCIA: Algunos procesos de Node-RED aún persisten: $FINAL_CHECK"
echo "Puede ser necesario reiniciar el sistema para liberarlos completamente."
return 2
fi
fi
return 0
}
# Verificar primero si el archivo PID existe
if [ -f "$PID_FILE" ]; then
echo "Usando archivo PID: $PID_FILE"
if kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
local PID=$(cat "$PID_FILE")
echo "PID válido encontrado: $PID"
# Enviar señal SIGTERM para terminar amigablemente
kill $PID 2>/dev/null
found_processes=1
# Esperar brevemente
sleep 2
else
echo "Archivo PID existe pero el proceso no está activo"
fi
# Eliminar el archivo PID en cualquier caso
rm -f "$PID_FILE"
fi
# Buscar y matar todos los procesos de Node-RED
kill_all_nodered
# Usar pkill como último recurso
pkill -9 -f "node-red" 2>/dev/null
# Verificación final y mensaje
if pgrep -f "node-red" > /dev/null; then
echo "ERROR: No se pudo detener completamente Node-RED."
echo "Verifique manualmente los procesos con: ps aux | grep node-red"
return 1
elif [ $found_processes -eq 1 ]; then
echo "Node-RED detenido correctamente."
return 0
else
echo "No se encontraron procesos de Node-RED en ejecución."
return 1
fi
}
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)"
echo " - URL: http://localhost:$NODE_RED_PORT"
echo " - Directorio de datos: $NODE_RED_DATA"
echo " - Archivo de log: $LOG_FILE"
# Mostrar tiempo de ejecución si está disponible
if command -v ps &>/dev/null; then
local start_time=$(ps -p $(cat $PID_FILE) -o lstart= 2>/dev/null)
[ -n "$start_time" ] && echo " - Iniciado: $start_time"
fi
# 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
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..."
# Forzar detención completa
stop
# Verificación adicional y limpieza
for i in {1..3}; do
if pgrep -f "node-red" > /dev/null; then
echo "Intento adicional $i: Forzando terminación de procesos persistentes..."
pkill -9 -f "node-red" 2>/dev/null
sleep 2
else
break
fi
done
# Comprobar una última vez
if pgrep -f "node-red" > /dev/null; then
echo "ADVERTENCIA: No fue posible detener completamente Node-RED."
echo "Los nuevos procesos podrían comportarse de manera inesperada."
fi
# Limpiar cualquier archivo temporal o socket que pudiera causar problemas
rm -f /tmp/node-red-*.sock 2>/dev/null
# Esperar a que el sistema se estabilice
sleep 3
# Iniciar Node-RED
start
}
install_deps() {
echo "Instalando dependencias de Node-RED..."
# Verificar si Node.js y npm están instalados
if ! command -v node &> /dev/null || ! command -v npm &> /dev/null; then
echo "Error: Node.js y npm son requeridos pero no están instalados."
echo "Instala Node.js con el comando: bin/npm_install.sh"
exit 1
fi
# Verificar y corregir package.json si es necesario
if [ -f "package.json" ]; then
# Verificar si package.json está vacío o solo contiene espacios/saltos de línea
if [ ! -s "package.json" ] || [ "$(cat package.json | tr -d '[:space:]')" = "" ]; then
echo "ADVERTENCIA: Archivo package.json está vacío. Eliminándolo para una instalación limpia..."
rm -f "package.json"
else
# Verificar si el archivo es un JSON válido
if ! node -e "try { require('./package.json'); process.exit(0); } catch(e) { process.exit(1); }" 2>/dev/null; then
echo "ADVERTENCIA: Archivo package.json contiene JSON inválido. Haciendo copia de seguridad..."
mv "package.json" "package.json.bak.$(date +%Y%m%d%H%M%S)"
fi
fi
fi
# Inicializar package.json si no existe
if [ ! -f "package.json" ]; then
echo "Inicializando package.json..."
npm init -y
fi
# Instalar o actualizar Node-RED
echo "Instalando Node-RED..."
npm install --save node-red
# Instalar paquetes comunes útiles para IoT
echo "Instalando módulos adicionales para Node-RED..."
npm install --save node-red-dashboard node-red-node-serialport node-red-contrib-mqtt-broker
# Verificar si las instalaciones fueron exitosas
if npm list node-red | grep -q "node-red"; then
echo "Node-RED instalado correctamente."
else
echo "ADVERTENCIA: Hubo problemas instalando Node-RED."
fi
echo "Todas las dependencias instaladas. Use './nodered.sh start' para iniciar el servidor."
}
logs() {
if [ -f "$LOG_FILE" ]; then
if command -v tail &>/dev/null; then
echo "Mostrando las últimas líneas del log (Ctrl+C para salir):"
tail -f "$LOG_FILE"
else
echo "Contenido del archivo de log:"
cat "$LOG_FILE"
fi
else
echo "No hay archivo de log disponible."
fi
}
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
status) status ;;
install) install_deps ;;
logs) logs ;;
*)
echo "Node-RED Administración"
echo "Uso: $0 {start|stop|restart|status|install|logs}"
echo ""
echo "Comandos:"
echo " start - Inicia el servidor Node-RED"
echo " stop - Detiene el servidor Node-RED"
echo " restart - Reinicia el servidor Node-RED"
echo " status - Muestra el estado del servidor"
echo " install - Instala/actualiza Node-RED y dependencias comunes"
echo " logs - Muestra los logs en tiempo real"
;;
esac

View file

@ -7,7 +7,7 @@
#Personal Email : mauro.rosero@gmail.com
#Created : 2024/12/01 15:27:00
#Modified : 2025/03/19 11:57:08
#Version : 1.2.0
#Version : 1.3.0
#==============================================================================
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
#==============================================================================

View file

@ -7,7 +7,7 @@
#Personal Email : mauro.rosero@gmail.com
#Created : 2025/03/21 19:27:08
#Modified : 2025/03/21 19:27:08
#Version : 1.2.0
#Version : 1.3.0
#==============================================================================
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
#==============================================================================

View file

@ -7,7 +7,7 @@
#Personal Email : mauro.rosero@gmail.com
#Created : 2025/03/21 19:27:08
#Modified : 2025/03/21 19:27:08
#Version : 1.2.0
#Version : 1.3.0
#==============================================================================
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
#==============================================================================

View file

@ -7,7 +7,7 @@
#Personal Email : mauro.rosero@gmail.com
#Created : 2025/03/22 14:57:08
#Modified : 2025/03/22 14:57:08
#Version : 1.2.0
#Version : 1.3.0
#==============================================================================
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
#==============================================================================