¿Cómo establecer la variable de entorno en el inicio previo en el script Upstart?
Tenemos una aplicación de demonio C ++ personalizada que se bifurca una vez. Así que hemos estado haciendo esto en nuestro script Upstart en Ubuntu 12.04 y funciona perfectamente:
expect fork
exec /path/to/the/app
Sin embargo, ahora debemos pasar un argumento a nuestra aplicación que contiene el número de CPU en la máquina en la que se ejecuta:
cat /proc/cpuinfo | grep processor | wc -l
Nuestro primer intento fue este:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
Mientras eso inicia nuestra aplicación con el valor -t correcto, Upstart rastrea el valor pid incorrecto, supongo que porque cat, grep & wc ordena todos los procesos de inicio en exec antes de nuestra aplicación.
También probé esto, e incluso no funciona, supongo que porque configurar un env var ejecuta un proceso. Upstart todavía rastrea al pid incorrecto:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
También he intentado hacer esto en una estrofa de env, pero al parecer esos no ejecutan comandos:
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
También intenté hacer esto en pre-inicio, pero las variables env enviadas allí no tienen ningún valor en la stanza exec:
pre-start
NUM_CORES=32
end script
¿Alguna idea de cómo configurar este NUM_CORES correctamente, y aún así obtener Upstart para rastrear el pid correcto para nuestra aplicación que se bifurca una vez?