Monitorizar/Daemonizar Node-Red
Vamos a usar monit para daemonizar/monitorizar node-red
Pero sin usar privilegios de root.
Lo de daemonizar viene porque quiero que node-red se rearranque automaticamente. (como un demonio del sistema).
Tambien es valido para cualquier otro programa.
1) Instalar monit.
apt-get install monit
como root o sudo apt-get install monit
Si no tienes permisos de root puedes instalarlo en el directorio de trabajo de tu usuario: Apendice1 instalar monit sin ser root
2) preparar coocalhost:1313/posts/pentesting/euskalhack_2019/pentestin_illidan/#crear-un-diccionario-con-los-datos-de-una-webnfiguraciones como usuario.
Supongamos que node-red correra como el usuario em50l
Crear carpeta ~/monit /
mkdir ~/monit
Crear archivo de inicio monit.rc /
nano ~/monit/monit.rc
/ (nano o tu editor de texto preferido)
Pega el siguiente script mofificando em50l por tu usuario.
############################################################################### ## Monit control file ############################################################################### set daemon 120 # check services at 2-minute intervals with start delay 15 # optional: delay the first check by 4-minutes (by set logfile /home/em50l/monit/monit.log set idfile /home/em50l/monit/id set statefile /home/em50l/monit/state set eventqueue basedir /home/em50l/monit/events # set the base directory where events will be stored slots 50 # optionally limit the queue size check process nodered matching "node-red" start program = "/home/em50l/monit/node-red_start" stop program = "/home/em50l/monit/node-red_stop" if failed host 127.0.0.1 port 1880 protocol http then restart
- Crear archivo de inicio
nano ~/monit/node-red_start
Pega y personaliza el siguiente script.(ctrl+x para salir)
#!/bin/sh ## Arranque de node-red ( cd ; node-red --max-old-space-size=80 &)& ## Aviso telegram avisando del re-inicio. tk=bot_token_de_tu_bot_telegram id=Tu_ID_telegram_o_chat_ID txt=$(hostname)+node-red+init+OK (timeout 5s curl -sk "https://api.telegram.org/$tk/sendMessage?chat_id=$id\&text=$txt " )&
-
Nota: para majejo de bots y avisos en telegram mira la
seccion telegram
3) Prueba de funcionamiento.
- Arranco Monit “aocalhost:1313/posts/pentesting/euskalhack_2019/pentestin_illidan/#crear-un-diccionario-con-los-datos-de-una-web mano”
monit -vv -c ~/monit/monit.rc
em50l@jejo.es:~$ monit -vv -c ~/monit/monit.rc Runtime constants: Control file = /home/em50l/monit/monit.rc Log file = /home/em50l/monit/monit.log Pid file = /home/em50l/.monit.pid Id file = /home/em50l/monit/id State file = /home/em50l/monit/state Debug = True Log = True Use syslog = False Is Daemon = True Use process engine = True Poll time = 120 seconds with start delay 15 seconds Expect buffer = 256 bytes Event queue = base directory /home/em50l/monit/events with 50 slots Mail from = (not defined) Mail subject = (not defined) Mail message = (not defined) Start monit httpd = False The service list contains the following entries: Process Name = nodered Match = node-red Monitoring mode = active Start program = '/home/em50l/monit/node-red_start' timeout 30 second(s) Existence = if does not exist then restart Pid = if changed then alert PPid = if changed then alert Port = if failed [127.0.0.1:1880 [HTTP via TCPSSL] with timeout 5000 seconds] then restart System Name = em50l Monitoring mode = active https://www.cyberciti.biz/tips/howto-monitor-and-restart-linux-unix-service.html ------------------------------------------------------------------------------- pidfile '/home/em50l/.monit.pid' does not exist Starting Monit 5.9 daemon Monit start delay set -- pause for 15s
- Visualizo log
cat ~/monit/monit.log
em50l@jejo.es:~$ cat ~/monit/monit.log [UTC Nov 3 17:43:00] info : Starting Monit 5.9 daemon [UTC Nov 3 17:43:00] info : Monit start delay set -- pause for 15s [UTC Nov 3 17:43:15] info : 'jejo.es' Monit started [UTC Nov 3 17:43:15] error : 'nodered' process is not running [UTC Nov 3 17:43:15] info : 'nodered' trying to restart [UTC Nov 3 17:43:15] info : 'nodered' start: /home/em50l/monit/node-red_start
-
Aqui se puede ver como a los 15 segundos se realiza una comprobacion de si node-red esta arrancado.
Como no es asi. Arranca node-red y nos envia un telegram.
- Prueba reinicio node-red
Si mato el proceso node-red /killall node-red
Vere como rearranca automaticamente de nuevo. (en un periodo inferior a 2min)
4) Persistencia.
Si quiero que monit cargue al inicio con permisos de usuario
- usando /etc/rc.local: (Permisos root necesarios)
Podrias añadir una linea como esta a
/etc/rc.local
Recuerda: mofifica em50l por tu usuario.
(cd /home/em50l/ ;su em50l -c "monit -vv -c /home/em50l/monit/monit.rc&")&
- usando crontab: (no se necesitan permisos root)
Desde el usuario que va a ejecutar node-red.
Abre el editor de tareascrontab -e
y añade@reboot monit -c ~/monit/monit.rc&
al final del texto.
# For more information see the manual pages of crontab(5) and cron(8) @reboot monit -c ~/monit/monit.rc&
Y ya tendriamos node-red monitorizado y daemonizado.
(sin el uso de permisos root)
Referencias
- Articulos uso bots en telegram
- https://mmonit.com/monit/
- https://www.mmonit.com/monit/documentation/monit.html#ACTION
- https://www.cyberciti.biz/tips/howto-monitor-and-restart-linux-unix-service.html
- https://serverfault.com/questions/735621/debian-how-to-run-a-script-on-startup-without-having-to-write-30-lines-of-shell
- https://www.linuxnix.com/crontab-configuration-in-linux/
___________
Apendice1: instalar monit sin ser root.
ve a https://mmonit.com/monit/#download
Descargate el binario compatible con tu sistema y arquitectura.
y descomprimelo en la carpeta *monit de tu usuario
wget https://mmonit.com/monit/dist/binary/5.26.0/monit-5.26.0-linux-x64.tar.gz
tar -xvf monit-5.26.0-linux-x64.tar.gz -C ~/monit/
cp ~/monit/monit-*/bin/monit ~/monit/
Tendras que modificar crontab -e
para que apunte al ejecutable en la carpeta del usuario.
@reboot ~/monit/monit -c ~/monit/monit.rc&