スクリプトでGNU画面内から実行されているかどうかを確認することはできますか?


10

リモートサーバーで長時間実行されるプロセスがあり、手動で開始される場合があります。残念ながら、インターネット接続が停止し、カーネルがパニックに陥り、ジョブの接続と開始に使用されるsshセッションが他の多くの課題に直面する可能性があります。

画面は、プロセスが中断されないようにするための完璧な方法のようです。ただし、画面を開始することを常に覚えてからスクリプトを実行してプロセスを開始することを人に頼ることは、発生するのを待つ問題です。スクリプトが画面内から呼び出されているかどうかを確認できるスクリプトからの方法はありますか?そうである場合、プロセスは続行します。それ以外の場合、スクリプトはユーザーに最初に画面を実行するように指示するメッセージで終了します。


回答:


11

そのための環境変数があります。画面内で実行されている場合は、に$TERMなりますscreen。とても簡単です。その上にある場合にのみ行います。例えば、

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

画面内にバーをエコーし​​ます。それ以外の場合はfoo。


2
またscreen-256color、ユーザーが256色サポートを構成している場合もあります。
mgorven 2012年

または、byobuがインストールされているシステムではscreen-bce。echo $ TERM screen-bce
nelaaro 2012年

7

画面での作業中に、スクリプトを「nohup」で実行してみませんか?これにより、接続が切断された場合でも引き続き実行されます。

デフォルトでファイルに出力されるため、必要に応じて他のツールを使用してスクリプト出力を監視できます。


1
nohupで実行すると、プロセスが引き続き実行されることを確認するのと同じ結果が得られますが、nohupでスクリプトを実行するのを忘れる可能性があるという同じ問題はまだ発生しませんか?または、スクリプトに「nohup」が使用されたことを確認する方法はありますか、またはnohupで元のスクリプトを呼び出すラッパースクリプトを作成する必要がありますか?
cclark

うん。私は私の子供を愛するように私のパダワン(ジュニアのシステム管理者)を愛していますが、彼らはそのようなことを忘れがちです。したがって、重要なコマンドの前に何を入力するかを覚える必要がないように、すべてがまとめられます。
マゼラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.