2017-10-05 68 views
1

我正在CentOS 7上創建我的第一個初始化腳本。我想在此腳本中以deamon的身份運行一個進程,並嘗試使用/ etc/init.d/functions文件,但是當我包含此腳本執行停止。包含/etc/init.d/functions後Bash腳本停止

假設我創建的文件是 「/etc/init.d/UpdateScript」 如果我寫:

echo "Script start" 
. /etc/init.d/functions 
echo "After add functions" 

於是命令後: /etc/init.d/UpdateScript開始

我只有「腳本啓動」作爲輸出。但是,如果我評論「#./etc/init.d/functions」,我也有「添加函數之後」,當然還有「守護進程:命令未找到」。 這種奇怪行爲的原因是什麼?如何解決它?

+0

嘗試'set -x'來查看'/ etc/init.d/functions'正在退出的位置。 –

+0

'/ etc/init.d'在CentOS 7中被棄用,切換到systemd。嘗試尋找'/ lib/lsb/init-functions'以獲得更便攜的選擇。如果你還沒有安裝'redhat-lsb-core'軟件包,你需要安裝它。更好的是,編寫一個systemd'.service'文件,而不是init.d-style啓動腳本。 –

+0

你在腳本中使用'set -e'嗎? –

回答

0

/etc/init.d/functionsreturn 0結尾。當source(或.)是一個shell腳本時,你實際上將source呼叫替換爲其內容。由於在那裏有回報,所以執行不會繼續執行,並且echo "After add functions"從不執行。

+0

什麼版本的CentOS 7以'return 0'結尾?它不在我的7.2系統上。 (它怎麼可能,甚至?'return'只能在函數內部工作。) –

+0

在Fedora 26上注意到了這一點。我猜這在CentOS/RHEL系統上是類似的,但我沒有一個在檢查。 – Mureinik

+0

是的,它確實以「return 0」結尾,可能是因爲init.d的棄用。 – kukuruzo91