Wie wird die Umgebungsvariable im Upstart-Skript vor dem Start festgelegt?

Wir haben eine benutzerdefinierte C ++ - Daemon-Anwendung, die einmal gabelt. Also haben wir dies in unserem Upstart-Skript auf Ubuntu 12.04 gemacht und es funktioniert perfekt:

expect fork
exec /path/to/the/app

Jetzt müssen wir jedoch ein Argument an unsere App übergeben, das die Anzahl der CPUs auf dem Computer enthält, auf dem sie ausgeführt wird:

cat /proc/cpuinfo | grep processor | wc -l

Unser erster Versuch war dieser:

expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`

Während dies unsere App mit dem korrekten -t-Wert startet, verfolgt Upstart den falschen PID-Wert. Ich gehe davon aus, dass diese cat-, grep- und wc-Befehle alle Startprozesse in exec vor unserer App ausführen.

Ich habe es auch versucht, und auch wenn es nicht funktioniert, denke ich, weil das Einstellen einer Umgebungsvariablen einen Prozess ausführt? Upstart verfolgt immer noch die falsche PID:

expect fork
script
    NUM_CORES=32
    /path/to/the/app -t $NUM_CORES
end script

Ich habe auch versucht, dies in einer env-Zeilengruppe zu tun, aber anscheinend führen diese keine Befehle aus:

env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`

Dies wurde auch vor dem Start versucht, aber die dort festgelegten env-Variablen haben keine Werte in der Zeilengruppe exec:

pre-start
    NUM_CORES=32
end script

Haben Sie eine Idee, wie Sie dieses NUM_CORES-Set richtig einstellen und Upstart dennoch dazu bringen können, die richtige PID für unsere App zu ermitteln, die einmal gabelt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage