Как установить переменную среды при запуске в сценарии Upstart?

У нас есть специальное приложение-демон C ++, которое разветвляется один раз. Итак, мы делали это в нашем сценарии Upstart на Ubuntu 12.04, и он отлично работает:

expect fork
exec /path/to/the/app

Однако теперь нам нужно передать аргумент нашему приложению, которое содержит количество процессоров на компьютере, на котором оно работает:

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

Наша первая попытка была такая:

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

Хотя это запускает наше приложение с правильным значением -t, Upstart отслеживает неверное значение pid, я полагаю, потому что эти cat, grep & amp; wc командует все процессы запуска в exec перед нашим приложением.

Я также попробовал это, и даже это не работает, я думаю, потому что установка env var запускает процесс? Upstart все еще отслеживает неправильный pid:

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

Я также пытался сделать это в разделе env, но, очевидно, эти команды не запускаются:

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

Также пытался сделать это в предстартовом режиме, но заданные там значения env не имеют никаких значений в разделе exec:

pre-start
    NUM_CORES=32
end script

Любая идея, как правильно установить этот NUM_CORES, и все же заставить Upstart отследить правильный pid для нашего приложения, которое разветвляется?

Ответы на вопрос(3)

Ваш ответ на вопрос