これがSOに属しているかどうかはわかりませんでした(コーディングのバグであるため)が、使用しているソフトウェアの微妙さについてはもっと知識があると思いました(したがって、おそらくU&Lも考慮することができます)。
最小限のコードスクリプトを次に示します(完全なスクリプトの編集を参照してください。この方法で行う理由があります)。
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
サーバーがバックグラウンドで実行され、ログファイルに出力されます。
次にfollow
、そのログファイルを使用しless +F
ます。これを終了するには、を押す前にctrl+をc押す必要がありますQ。
起こるのは、コマンド内で(停止するために)I ctrl+ cを実行すると、先頭にあるサーバーが何らかの理由で強制終了されます。他に影響はありません。私がすることができます+ (サーバーが殺されているので、新たな情報を取得しない)、再びログを尾行開始とする私がヒットした場合、スクリプトの実行の残りの部分を正常に。less
tailing
nohup
shiftfQ
これが起こる理由を知っていますか?それを避ける方法/私が使用する必要がある他の何か?
PS
サーバープログラムは^C
、問題の可能性があるをリッスンしている可能性があります。それを止めるために私にできることはありますか?たとえば{SERVERCOMMAND}
、単独で(ブロッキング方式で)実行する場合、ctrl+をc押すとすぐに殺されません。印刷しますReceived ^C signal, shutting down
(そして、それ自体を殺します)。これは私^C
が入るときに起こっていることですless
(最終結果Received ^C signal, shutting down
がログに書き込まれます)。
PPS
私はいくつかのことを試してきました(どれもうまくいきませんでした)。
変更してスクリプトから標準入力を切断しようとしています
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &
を使用
stty intr ^G
して割り込みコマンドを置き換えますが、その後ctrl+ とにかくg正確^C
に実行しました(したがって、これは代わりに私の端末エミュレータの問題になる可能性があります;konsole
)置く
nohup
&/またはless
括弧内の行は、(それサブシェルにします)xterm
代わりにスクリプトを実行するkonsole
nohup
SIGHUP
CTRL + CがSIGINT
シグナルを送信するのに対し、プロセスはシグナルを受信しません。それnohup
が、期待した効果が得られない理由です。
I think it is due to the handling within the database software, not on the shell
。プログラムはこれをどのように行いますか?それでは、どうすれば停止できますか?