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?