2017-10-05 3 views
1

CentOS 7で最初のinitスクリプトを作成しています。このスクリプトでデーモンとして1つのプロセスを実行し、/ etc/init.d /関数ファイルですが、このスクリプトをインクルードすると実行が停止します。/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"とコメントすれば、 "機能を追加した後"でも "daemon:command not found"はもちろんです。 その奇妙な動作の理由は何ですか?それを修正するには?

+0

'/etc/init.d/function'がどこから出ているのかを見るには' set -x'を試してください。 –

+0

'/ etc/init.d'はCentOS 7で廃止され、systemdに切り替わりました。より移植性の高い代替方法として、 '/ lib/lsb/init-functions'を調達してみてください。 'redhat-lsb-core'パッケージをまだインストールしていない場合は、それをインストールする必要があります。さらに、init.d形式の起動スクリプトではなく、システムの '.service'ファイルを書きます。 –

+0

あなたのスクリプトに 'set -e'を使いますか? –

答えて

0

/etc/init.d/functions末尾がreturn 0である。 source(または.)のシェルスクリプトを使用すると、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

関連する問題