Upstart: Pourquoi deux process lors de l'exécution en tant qu'user différent?

Je souhaite garder une application nodejs en cours d'exécution, alors j'ai suivi ceci: http://howtonode.org/deploying-node-upstartmonit et installé Monit et Upstart qui fonctionnent parfaitement pendant quelques mois. Je viens d'append une fonctionnalité à mon application qui permet l'écriture de disque et j'obtiens des erreurs de permissions. Je suis allé chercher tout parce qu'il semblait que les erreurs de permissions ne devaient pas être le problème. Il s'avère que l'user que je démarre avec Upstart n'est pas réellement l'user qui exécute l'application!

Quand je cours:

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

Soit via Monit / Upstart, soit simplement via SSH, il crée 2 process. De 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 

Lorsque je me connecte en tant qu'user de deploy et que je lance:

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

Il n'y a qu'un seul process!

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

Ce problème est que, pour une raison quelconque, le deuxième process n'a pas les bonnes permissions à écrire et semble être celui qui fait le travail. Tout est parfait lorsque je n'utilise pas Upstart, y compris les écritures, mais j'ai besoin de Upstart / Monit pour que mon application nodejs soit exécutée.

Quelle est la meilleure façon de configurer Monit / Upstart dans ce cas, alors? Je veux garder des permissions faibles (d'où l'user deploy qui n'a pas de sudo) et je veux que l'application commence quand il se bloque.

C'est mon 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 

Quelque chose de mal existe-t-il?

Le didacticiel dit utiliser l'user sudo -u user ... pour l'exécuter en tant qu'user que vous souhaitez. Mais c'est ce qui cause le problème.

Merci!

Paul

One Solution collect form web for “Upstart: Pourquoi deux process lors de l'exécution en tant qu'user différent?”

sudo persiste tant que le process est en cours d'exécution, de sorte que la solution consiste à utiliser les strophes setuid et setgid de upstart. Le problème avec cela est que la ligne qui envoie le PID du démon a besoin de privilèges de base. Voici une solution de contournement:

[nom] .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 

[nom] -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 
  • Comment définir différents signaux d'arrêt / redémarrage avec démarrage
  • rvmsudo contremaître export upstart sans requestr de mot de passe
  • Upstart: stop on runlevel vs stop on start rc RUNLEVEL =
  • Événement upstart basé sur le niveau
  • uWSGI ne démarrera pas via Upstart, mais démarre d'accord depuis la console
  • Exécution des sites Django via Upstart
  • gestion du démon portable de bash (sysvinit / upstart / systemd)
  • Mysql avec le démarrage ne démarre pas
  • Scripts upstart: exécutez une tâche après la mise en réseau
  • Comment puis-je démarrer nginx via upstart?
  • Épargner plusieurs instances d'un démon dans Ubuntu
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.