Upstart: perché due processi quando si esegue come utente diverso?

Voglio mantenere un'applicazione nodejs in esecuzione, quindi ho seguito questo: http://howtonode.org/deploying-node-upstart-monit e installato Monit e Upstart che hanno funzionato perfettamente per un paio di mesi. Ho appena aggiunto una funzionalità alla mia applicazione che consente di scriverne il disco e sto ottenendo errori di autorizzazioni. Sono andato a cercare tutto perché sembrava che gli errori di autorizzazioni non dovrebbero essere il problema. Risulta che l'utente che inizia con Upstart non è in realtà l'utente che esegue l'applicazione!

Quando corrono:

sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js 

Sia via Monit / Upstart, sia semplicemente tramite SSH, crea due processi. Dalla ps ax :

 2869 ? Ss 0:00 sudo -u deploy node /srv/www/[name of my app]/dist/app.js 2878 ? Sl 0:01 node /srv/www/[name of my app]/dist/app.js 

Quando accedo come utente di deploy e viene eseguito solo:

 NODE_ENV=production node /srv/www/[name of my app]/dist/app.js 

C'è solo un process!

 3131 pts/1 Sl+ 0:04 node /srv/www/[name of my app]/dist/app.js 

Questo problema è che per qualche motivo il secondo process non dispone delle autorizzazioni corrette per la scrittura e sembra essere quello che fa il lavoro. Tutto è perfetto quando non uso Upstart compreso le scritture, ma ho bisogno di Upstart / Monit per mantenere l'applicazione nodejs in esecuzione.

Qual è il modo migliore per configurare Monit / Upstart in questo caso? Voglio mantenere basse autorizzazioni (quindi l'utente deploy che non dispone di sudo) e voglio che l'applicazione inizia quando si blocca.

Questo è il mio script Upstart:

 start on startup stop on shutdown script export HOME="/home/deploy" echo $$ > /var/run/[name of my app].pid exec sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js >> /srv/www/log/[name of my app].sys.log 2>&1 end script 

C'è qualcosa che non va?

Il tutorial dice di utilizzare sudo -u user ... per eseguirlo come utente che desideri. Ma questa è la cosa che sta causando il problema.

Grazie!

Paolo

  • Upstart non ricarica la configuration
  • Upstart vs Supervisord per gestire i processi WSGI
  • passando argomenti per avviare il lavoro
  • Come fare upstart indietro, invece di rinunciare
  • riavviare php5-fpm su ubuntu 14.04 con lo chef
  • Script upstart vs command-line: perché questa differenza nel comportmento?
  • Utilizzo di Upstart per gestire il tunnel inverso AutoSSH
  • script upstart: eseguire un'attività dopo la creazione di networking
  • One Solution collect form web for “Upstart: perché due processi quando si esegue come utente diverso?”

    il sudo persiste finché il process è in esecuzione, quindi la soluzione è quella di utilizzare le sette setuid e setgid di upstart. Il problema con questo è che la row che invia il PID del daemon ha bisogno di privilegi di root. Ecco una soluzione alternativa:

    [Nome] Conf:

     start on runlevel [2345] stop on runlevel [016] env HOME=/home/deploy env NODE_ENV=production setuid deploy setgid deploy exec node /srv/www/[name]/dist/app.js 

    [Nome] -pidfile.conf

     start on started [name] stop on stopped [name] pre-start script initctl status name | cut -d" " -f4 > /var/run/[name].pid end script post-stop exec rm -f /var/run/[name].pid 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.