シェルプロンプトを表示するには、init.dスクリプトの完了後にEnterキーを押す必要があるのはなぜですか?

シェルプロンプトを表示するには、init.dスクリプトの完了後にEnterキーを押す必要があるのはなぜですか?

独自のCentOS init.dスクリプトを作成する必要がありました。セロリDebian には 1 つだけを提供するからです。私のスタックオーバーフローの質問に答えて、私が書いたスクリプトを見ることができます。3989656

しかし、このスクリプトには問題があります。私が電話した場合:

sudo service celeryd start

その後、Enterキーを押してシェルプロンプトを表示する必要があります。これは、SSHを介して他のコンピュータから次のように呼び出そうとするために問題になります。

ssh 192.168.2.3 sudo service celeryd start

そしてsshは決して返されません。 (私は使う構造上記のsshコマンドを呼び出すので、リモートサービスを起動および停止します。

この動作の原因は何ですか?スクリプトでこれを修正する方法は?

Thomas Themelがコメントで提案したように "sh -x /etc/init.d/celeryd"を実行すると、出力は次のようになります。

runuser -s /bin/bash - apache -c 'ulimit -S -c 0 >/dev/null 2>&1 ; /usr/local/django/portalapps/manage.py celeryd --pidfile /var/run/celery.pid -f /var/log/celeryd.log -l INFO'

/etc/init.d/functions(この一連のbashコマンドを生成した機能)のデーモン機能が実際にプロセスをデーモン化する方法を理解していません。

ベストアンサー1

実際にはシェルプロンプトが表示されますが、それを認識できない場合があります。バックグラウンドで端末に書き込むプログラムがある場合、プロンプトは隠されますが、それでも入力できます。

テスト.sh:

#! /bin/sh
echo -e "This is a test\n\n"

インタラクティブシェル:

$sh test.sh &
$This is a test



_

この例にはヒントがあります。 「This is a test」というプロンプトの前に「$」が表示されます。下部には入力を待つカーソルが見えます。ここにコマンドを入力してEnterを押すと、通常どおり動作します。lsデーモンを起動してからを押す前に実行してください<enter>

おすすめ記事