Nous avons une application de démon C ++ personnalisée qui fourche une fois. Nous l'avons donc fait cela dans notre script UPSTART sur Ubuntu 12.04 et cela fonctionne parfaitement: Cependant, nous devons maintenant passer à une dispute à notre application qui contient le nombre de processeurs sur le machine sur laquelle il fonctionne: p> notre première tentative était la suivante: p> tandis que cela démarre notre application avec le bon -t Valeur, UPSTART suit la mauvaise valeur PID, je suppose que celles-ci, Grep & WC commande toutes les processus de lancement dans EXED avant notre application. P> J'ai également essayé, et même ça ne le fait pas Travailler, je suppose que parce que la définition d'un VaR envoie un processus? UPSTART suivit toujours le mauvais PID: P> pre-start
NUM_CORES=32
end script
3 Réponses :
C'est gênant. La méthode recommandée consiste à écrire un fichier env dans la Stanza de pré-démarrage, puis à la source dans le script Stanza. C'est ridicule, je sais.
expect fork pre-start script exec >"/tmp/$UPSTART_JOB" echo "NUM_CORES=$(cat /proc/cpuinfo | grep processor | wc -l)" end script script . "/tmp/$UPSTART_JOB" /path/to/app -t "$NUM_CORES" end script post-start script rm -f "/tmp/$UPSTART_JOB" end script
Super utile! Une chose: je pense que vous devez toujours utiliser "EXEC / PATH / TO / APP" à l'intérieur du bloc de script si c'est ce dont vous avez besoin pour le suivi PID avant. Une fois que j'ai ajouté "EXEC" de retour, cela fonctionnait magnifiquement pour moi.
@ Codya.ray qui dépend entièrement du comportement de la fourche du service en cours de démarrage. Dans notre cas, Attendez-vous au démon code> peut avoir été approprié.
Ne pouvait pas être plus reconnaissant pour cela !! Était en difficulté avec elle pendant plus d'une semaine.
J'ajouterais après avoir attribué une valeur dans "script". Je me souviens que A / Bin / SH symbolisé à une coque non bash peut exécuter des scripts, alors je voudrais éviter les constructions de Bash-seulement. P> RE: Utilisation de "env" Stanza, il passe littéralement des valeurs et ne pas les traiter avec des conventions shell. p> p>
Selon la configuration UPStart de ZRAM-CONFIG:
script NUM_CORES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/') /path/to/the/app -t $NUM_CORES end script
Le problème avec c'est que $ () code> fourche un processus enfant (puis le tuyau provoque une autre fourchette), qui peut confondre le suivi de la fourche. Si vous fourrez plus de deux fois avant votre démon actuel, plus ancien UpStart ne peut pas suivre le processus de démon, puis Respawn ne fonctionnera pas correctement. Cela fonctionne pour ZRAM-CONFIG car cela ne fonctionne qu'une seule fois et n'a pas besoin de DEPAWN, mais ce n'est pas universel. :) C'est pourquoi la réponse de @ MPM est nécessaire.