我們有一個自定義的C++守護進程應用程序,它會分叉一次。因此,我們在我們的暴發戶腳本在Ubuntu 12.04在做這和它完美的作品:如何在Upstart腳本的預啓動中設置環境變量?
expect fork
exec /path/to/the/app
但是現在我們需要在一個參數傳遞給我們的應用程序包含CPU的機器上數傳在其上運行:
cat /proc/cpuinfo | grep processor | wc -l
我們的第一次嘗試是這樣的:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
雖然啓動我們用正確的-t值的應用程序,新貴跟蹤錯誤的PID值,我假設,因爲這些貓,grep & wc在我們的應用程序之前命令exec中的所有啓動進程。
我也試過這個,甚至它不工作,我猜是因爲設置一個env var運行一個進程?新貴尚跟蹤錯誤的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設置不當,仍然得到新貴追蹤正確的PID爲我們的應用程序,一旦叉?
超級有用!有一件事:我認爲你仍然需要在腳本塊中使用「exec/path/to/app」,如果這是你之前需要的pid跟蹤。一旦我添加了「exec」,這對我來說非常合適。 –
@ CodyA.Ray完全依賴於正在啓動的服務的分岔行爲。在我們的例子中,'expect daemon'可能是合適的。 – mpm