Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

357
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda