Abbiamo un'applicazione daemon C++ personalizzata che si biforca una volta. Così abbiamo fatto questo nel nostro script Upstart su Ubuntu 12.04 e funziona perfettamente:Come impostare la variabile di ambiente in pre-avvio nello script Upstart?
expect fork
exec /path/to/the/app
Comunque ora abbiamo bisogno di passare a un argomento per la nostra applicazione che contiene il numero di CPU sulla macchina su cui piste:
cat /proc/cpuinfo | grep processor | wc -l
il nostro primo tentativo è stato questo:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
Mentre che inizia la nostra applicazione con il valore corretto -t, Upstart tracce il valore pid sbagliato, sto assumendo perché quelli cat , grep & wc comanda tutti i processi di avvio in exec prima della nostra app.
Ho anche provato questo, e anche non funziona, credo perché l'impostazione di un env var esegue un processo? Upstart segue ancora il pid sbagliato:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
Ho anche provato a fare questo in uno strofa env ma a quanto pare quelli non eseguire i comandi:
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
anche provato a fare questo in pre-start, ma ENV le variabili di impostare lì non hanno alcun valore nella stanza exec:
pre-start
NUM_CORES=32
end script
Qualsiasi idea di come ottenere questo NUM_CORES impostato correttamente, e ancora ottenere Upstart per monitorare il corretto PID per la nostra applicazione che si biforca una volta?
super disponibile! Una cosa: penso che tu abbia ancora bisogno di usare "exec/path/to/app" all'interno del blocco di script se questo è quello che ti serviva prima per il tracciamento dei pid. Una volta aggiunto "exec", questo ha funzionato magnificamente per me. –
@ CodyA.Ray dipende completamente dal comportamento di biforcazione del servizio avviato. Nel nostro caso, 'expect daemon' potrebbe essere appropriato. – mpm