Nodo: intentar reiniciar usando Forever no funcionará en el script bash en cronjob

Tengo un simple script de bash escrito que implementa automáticamente el código en mi servidor Node.js cada vez que se realiza una confirmación y luego reinicia el servidor con una eternidad. Este script se ejecuta periódicamente en un cronjob. Ah, sí, el sitio todavía está en la fase de desarrollo antes de ser lanzado, por lo tanto, el servidor se reinicia constantemente. 🙂

El script hace algunas otras cosas, pero la parte realmente interesante son las siguientes dos líneas de código:

forever stopall forever start app.js 

Cuando ejecuto el script manualmente desde la línea de comandos, se produce la siguiente salida de esos dos comandos:

 Stopping all node jobs info: Forever stopped processes: data: uid command script forever pid logfile uptime data: [0] ev5a /usr/local/bin/node app.js 17482 17484 /home/ec2-user/.forever/ev5a.log 0:0:13:17.967 Starting up node server again info: Forever processing file: app.js 

Sin embargo, cuando el trabajo se ejecuta automáticamente a través de cron, esto es lo que se genera:

 Stopping all node jobs ^[[32minfo^[[39m: No forever processes running Starting up node server again ^[[32minfo^[[39m: Forever processing file: ^[[90mapp.js^[[39m 

Esto es realmente extraño para mí. Parece que cuando la secuencia de comandos se ejecuta a través de cron, Forever parece pensar que no hay ningún proceso de Nodo ejecutándose cuando intenta detenerse. Sé que es un hecho que el proceso de Nodo se está ejecutando, por lo que no estoy seguro de por qué aparece esto. Parece que no debería haber una diferencia entre los dos métodos de ejecución. Ambos scripts se ejecutan como el mismo usuario. ¿Alguien sabe por qué para siempre se está comportando de manera extraña?

Por lo general, forever se limita a los procesos que posee el usuario actual. Si el usuario que está ejecutando el trabajo cron no es el mismo que inició el proceso originalmente, para forever stopall no encontrará ningún PID que matar.

Por ejemplo, ejecuto todas mis aplicaciones de nodo usando un usuario llamado “nodejs”. Si estoy usando el sistema de manera interactiva, puedo usar sudo -H -u nodejs forever list . Y en la raíz crons o /etc/rc.local, su - nodejs -c "forever start /path/to/app.js"

No lo he probado, pero es posible que desee ver algunas de las opciones para siempre, como la bandera –exitcrash.

Forever tiene problemas al tratar con otros progtwigs que reinician automáticamente su servidor. Si bien no es específico de Chron, este enlace podría ayudar.