Screenセッションでプログラムを実行していると、プログラムがクラッシュすると自動的に再起動しますが、プログラムがクラッシュするとScreenセッションが終了します。
プログラムが自動的に再起動できるように、画面セッションを開いたままにしておきたい。それを行う方法はありますか?
Linux Debian 7Wheezyを実行しています
問題は、プログラムがどのように奇妙にクラッシュするかということです。私の頭に浮かぶ最初の2つのこと:
screen
もクラッシュ/終了/、これを表示しない方がよいと考える奇妙な制御シーケンスを送信します。screen
またはおそらく中間シェル)に信号を送信して、それらを終了します。私が試みる次のステップ:
screen
はどのくらい正確に終了しますか? screen
プロセス全体を強制終了しますか、それとも独自のウィンドウのみを強制終了しますか(並列実行中の画面コマンドはまだ有効ですが、画面セッションは切り離されます)?screen
は終了しますか(ファイルがクラッシュしなくなった場合、ファイルには何が含まれますか?興味があります)。たぶん、あなたはまだtail -f
を使って実行されているプログラムを見ることができます。tmux
の代わりにscreen
を使用する場合にも同じ問題が存在しますか?編集1(広告1):クラッシュするプログラムは、画面から直接実行できます。
screen /usr/local/bin/your/crashing/program
またはその間にシェルプロセスを使用します(たとえば、お気に入りのシェルで画面ウィンドウを開始してから、次のようなプログラムを実行します
screen
/usr/local/bin/your/crashing/program
または、次のようなものでリスポーンを実行するシェルスクリプトがあります
bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done'
pstree
の出力から、どのプロセスが関係しているかがわかります。
xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323)
`-pstree(322)
私の場合、screen
(309)ウィンドウのbash
(311)から別のxterm
(234)でbash
(230および231)を開始し、そこからpstree | less
(322および323)を実行しました。
子プロセスが終了すると、画面は終了します。これは正常な動作であり、クラッシュではありません。したがって、プログラムが画面で直接開始されてクラッシュした場合、画面も終了します。シェルでプログラムを手動で開始した場合、プログラムがクラッシュした後、そのシェルは再びプロンプトを表示するはずです。この場合、画面ウィンドウが閉じると、実際には何かがおかしいです。
ラウンドアバウトを少し知っておくと役に立ちます。プログラムを開始してリスポーンする方法。