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:

  • Velocità delle distro Linux differenti - perché la differenza?
  • Come distriggersre automaticamente Ubuntu X minuti dopo l'avvio?
  • Come ricreare un AMI funzionante dall'istantaneo di recupero dopo l'interruzione dell'8 agosto?
  • Sincronizza gli account utente su più server Linux
  • Come elencare tutti i file scritti a Linux?
  • ping: sendmsg: Operazione non consentita (a volte)
  • 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

  • Monit non inizierà la mia applicazione ns js
  • 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.