Jak ustawić zmienną środowiskową w pre-start w skrypcie Upstart?

Mamy niestandardową aplikację demona C ++, która rozwidla się raz. Robimy to w naszym skrypcie Upstart na Ubuntu 12.04 i działa on doskonale:

expect fork
exec /path/to/the/app

Jednak teraz musimy przekazać argument do naszej aplikacji, który zawiera liczbę procesorów w komputerze, na którym działa:

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

Nasza pierwsza próba była następująca:

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

Podczas gdy nasza aplikacja ma poprawną wartość -t, Upstart śledzi niepoprawną wartość pid, zakładam, że te cat, grep i wc komendują wszystkie procesy uruchamiania w exec przed naszą aplikacją.

Próbowałem również tego, a nawet to nie działa, chyba że ustawienie zmiennej env uruchamia proces? Początek wciąż śledzi niewłaściwy pid:

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

Próbowałem też to zrobić w sekcji env, ale najwyraźniej nie uruchamiają poleceń:

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

Próbowałem również to zrobić w pre-star, ale ustaw env vars tam nie ma żadnych wartości w sekcji exec:

pre-start
    NUM_CORES=32
end script

Jakiś pomysł, jak poprawnie ustawić ten NUM_CORES i nadal uzyskać Upstart, aby śledzić poprawny pid dla naszej aplikacji, która rozwidla się raz?

questionAnswers(3)

yourAnswerToTheQuestion