Tengo un proyecto IoT ejecutándose en una Raspberry Pi 2 con el sistema operativo Raspbian Jessie.
Es un servidor web que se ejecuta en NodeJS (v4) y estoy usando Winston para iniciar sesión en el servicio de registro de Loggly. Todo funciona bien cuando el proyecto se inicia a través de npm start
from terminal (cuando se ejecuta como 'pi' o mediante sudo -s). Sin embargo, cuando el proyecto se inicia en el arranque, el registro no funciona y no puedo entender por qué.
Para iniciar el proyecto en el arranque, creé un script etc/init.d. El proyecto se inicia y atiende el tráfico, todo funciona muy bien excepto el registro. No puedo ver ningún error (aunque no tener registro no ayuda). Así es como empiezo mi proyecto desde dentro de mi script etc/init.d:
/usr/bin/node /var/www/curtains/server.js
Estoy usando winston: https://www.npmjs.com/package/winston y winston-loggly: https://www.npmjs.com/package/winston-loggly .
¿Alguna idea de por qué, cuando el proceso se inicia en el arranque, el registro no funciona?
Agregando el código de inicialización de Winston según lo solicitado:
var winston = require('winston'); require('winston-loggly'); winston.add(winston.transports.Loggly, { token: "<snip>", subdomain: "<snip>", tags: ["tag", ip.address()], json:true }); winston.log('info',"Server.js starting up");
Cuando ejecuta npm start
, el nodo buscará un objeto de secuencias de comandos en su archivo package.json y ejecutará los comandos asociados con la tecla de start
.
En su secuencia de comandos init.d
, no está ejecutando npm start
, sino que simplemente ejecuta el nodo y pasa su archivo server.js
como primer argumento (que ejecutará ese archivo).
Lo más probable es que se necesite algo en su secuencia de comandos de start
para ejecutar su registro correctamente. Para resolver esto, puede:
init.d
, cwd
a la raíz de su proyecto y luego ejecute npm start
.package.json
para ver qué más está haciendo su secuencia de comandos de start
y agregue el equivalente a su secuencia de comandos init.d