Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

364
Vistas
La aplicación Nodejs no genera un proceso secundario de Python cuando la aplicación Nodejs comenzó a usar Systemd

Me gustaría iniciar mi aplicación node js en el arranque. Por lo tanto, inicio un servicio desde Systemd:

 [Unit] Description=Node.js server After=network.target [Service] ExecStart=/usr/bin/node /var/www/Raspberry-Pi-Status/js/server.js Restart = always RestartSec=10 StandardOutput=syslog StandardError=syslog SyslogIdentifier=nodejs-server Environment=NODE_ENV=production PORT=8000 Environment=PYTHONPATH=/usr/bin/python [INSTALL] WantedBy=multi-user.target

El servidor.js se ve así:

 var util = require('util'), spawn = require('child_process').spawn, py = spawn('python',['temperature.py'],{detached: true}); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'monitor', password : 'password', database : 'temps'}); var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'), sys = require('util'), exec = require('child_process').exec, child; // Listen on port 8000 app.listen(8000); // If all goes well when you open the browser, load the index.html file function handler(req, res) { fs.readFile(__dirname+'/../index.html', function(err, data) { if (err) { // If no error, send an error message 500 console.log(err); res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } py.stdout.on('data', function(data){ console.log('testing'); date = new Date().getTime(); temp = parseFloat(data); io.sockets.emit('temperatureUpdate',date,temp); }); // When we open the browser establish a connection to socket.io. // Every 5 seconds to send the graph a new value. io.sockets.on('connection', function(socket) { console.log('user connected'); });

La aplicación node.js debe iniciar un script de python que lea un sensor de temperatura. Cuando inicio node.js a través de la consola, todo funciona bien. Sin embargo, cuando empiezo desde Systemd, la secuencia de comandos de python no se genera. ¿Cuál es el problema allí? ¿Me estoy perdiendo de algo?

gracias de antemano alejandro

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Un problema podría ser la diferencia en el directorio de trabajo actual cuando se ejecuta manualmente frente a systemd. La llamada de spawn utilizada está documentada y tiene un valor predeterminado para heredar el directorio de trabajo actual.

Cuando se ejecuta a través del shell, ese sería el directorio en el que se encuentra actualmente. En man systemd.exec , encontrará la directiva "WorkingDirectory=`, que documenta el directorio de trabajo actual predeterminado de systemd: "predeterminado en el directorio raíz cuando systemd se ejecuta como una instancia del sistema".

Entonces, si su temperature.py se encuentra en /var/www/Raspberry-Pi-Status , configure:

 workingDirectory=/var/www/Raspberry-Pi-Status in your `[Service]` section.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda