Como definir a variável de ambiente no pré-início no script Upstart?
Nós temos um aplicativo daemon C ++ customizado que se bifurca uma vez. Então, estamos fazendo isso no nosso script Upstart no Ubuntu 12.04 e funciona perfeitamente:
expect fork
exec /path/to/the/app
No entanto, agora precisamos passar em um argumento para o nosso aplicativo que contém o número de CPUs na máquina em que ele é executado:
cat /proc/cpuinfo | grep processor | wc -l
Nossa primeira tentativa foi essa:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
Enquanto isso inicia nosso aplicativo com o valor -t correto, o Upstart rastreia o valor pid incorreto, estou assumindo porque os grupos cat, grep & wc comandam todos os processos de inicialização em exec antes do nosso aplicativo.
Eu também tentei isso, e nem isso funciona, eu acho, porque configurar um env var executa um processo? O Upstart ainda rastreia o pid errado:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
Eu também tentei fazer isso em uma estrofe env, mas aparentemente eles não executam comandos:
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
Também tentei fazer isso no pré-início, mas env vars set não tem nenhum valor na sub-rotina exec:
pre-start
NUM_CORES=32
end script
Alguma ideia de como definir NUM_CORES corretamente, e ainda obter o Upstart para rastrear o pid correto do nosso aplicativo que se bifurca uma vez?