Tenemos una aplicación personalizada de daemon de C++ que se bifurca una vez. Por lo que hemos estado haciendo esto en nuestro script Upstart en Ubuntu 12.04 y funciona perfectamente:¿Cómo establecer la variable de entorno en el precomienzo en el script Upstart?
expect fork
exec /path/to/the/app
Sin embargo, ahora tenemos que pasar en un argumento a nuestra aplicación que contiene el número de CPU en la máquina en la que se carreras:
cat /proc/cpuinfo | grep processor | wc -l
nuestro primer intento fue la siguiente:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
Mientras que comienza nuestra aplicación con el valor -t correcta, Upstart un seguimiento del valor PID mal, estoy asumiendo porque los gatos , grep & wc ordena todos los procesos de inicio en el servidor antes de nuestra aplicación.
También probé esto, e incluso no funciona, supongo porque al configurar un env var se ejecuta un proceso? Upstart todavía sigue el mal pid:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
También he intentado hacer esto en una estrofa env pero al parecer los que no se ejecutan comandos:
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
También probamos a hacer esto en pre-salida, pero env vars puesto en ella no tienen ningún valor en la estrofa ejecutivo:
pre-start
NUM_CORES=32
end script
alguna idea de cómo conseguir este NUM_CORES configurado correctamente, y aún así obtener Upstart para rastrear el PID correcto para nuestra aplicación que se bifurca una vez?
súper útil! Una cosa: creo que todavía necesita usar "exec/ruta/a/aplicación" dentro del bloque de script si eso es lo que necesitaba para el seguimiento de pid antes. Una vez que agregué "exec", esto funcionó maravillosamente para mí. –
@ CodyA.Ray que depende completamente del comportamiento de bifurcación del servicio que se inicia. En nuestro caso, 'expect daemon' puede haber sido apropiado. – mpm