多くの場所でscreen
が紹介されており、バックグラウンドジョブをログアウトしても安定して実行できます。彼らは使う
screen -dmS name
による screen -h
、このオプションは
-dmS name Start as daemon:切り離されたモードでセッションをスクリーンします。
デーモンとは何ですか?わかりません。
screen
と入力するだけで、自動的に画面に入ることがわかりました。コマンドを実行した後、Ctrl+a d
をクリックし、ログオフします。ジョブはまだ正常に実行されています。 この簡単なアプローチで問題ありませんか?本当に必要ですか-dmS
バックグラウンドジョブを安定させるには?
要約を挙げましょう。
Screenで設定したオプションに関係なく、screenで実行されるものはすべてログアウトしても安全です(ただし、ログアウト時に画面を終了するのではなく、画面を切り離す必要があります)。
-dmS
は、非現実的にバックグラウンドでジョブを送信するための便利なオプションです。あれは
screen -dmS nameOfScreen command
-dm
を使用するのは、スクリーンセッションでコマンドを実行し、インタラクティブに入力しない場合のみです。
-S
は、セッションに使用可能な名前を付けて、後で簡単に再接続できるようにするためのものです
対話的に使用し、人間が読める名前を付けたくない場合は、これらの引数をすべて安全に省略できます。
たとえば、コマンドを実行するためにscreen
を起動したいだけで、たとえば/path/to/longTime
を実行したくない場合は、次のように実行できます。
screen -dmS longSession /path/to/longTime
またはあなたができる
screen -S longSession
$ /path/to/longTime
ctrlad
どちらも同じことを実現しますが、スクリプトを作成する方が簡単で、タイピングが少し少なくなります。
screen -dmS name command args
としてより便利です。これは、バックグラウンドでname
というスクリーンセッションを開始し(つまり、デタッチ)、そのスクリーンセッション内でcommand args
を実行します。
command args
がない場合は、バックグラウンドでスクリーンセッションを開始するだけです。
どちらの場合も、後でそのセッションにアタッチできます(例:screen -d -r name
)。 man screen
から:
-d|-D [pid.tty.Host]
画面を開始しませんが、実行中の他の画面セッションを切り離します。画面の制御端末から「C-a d」と入力するのと同じ効果があります。
-D
は電源切断キーに相当します。デタッチできるセッションがない場合、このオプションは無視されます。-r
/-R
オプションと組み合わせると、より強力な効果を実現できます。
-d -r
セッションを再接続し、必要に応じて最初に接続を解除します。
-d -R
セッションを再アタッチし、必要に応じて、デタッチするか、最初に作成します。
-d -RR
セッションを再アタッチし、必要に応じてデタッチまたは作成します。複数のセッションが利用可能な場合は、最初のセッションを使用します。
-D -r
セッションを再接続します。必要に応じて、まずリモートで切り離してログアウトします。
-D -R
ここに添付してください。これは、詳細には次のことを意味します。必要に応じて、まずリモートで切り離してログアウトします。実行されていなかった場合は、作成してユーザーに通知してください。これは作者のお気に入りです。
-D -RR
ここに添付してください。それが何を意味するにせよ、それをしてください。注:
screen -list
を使用してセッションのステータスを確認することをお勧めします。
そのマニュアルページには、ここに重要な詳細がありません-読むべきです:
-d|-D [pid.tty.Host|session name]
-dmSは次のものを強制します。
-dm
-S sessioname
デーモンとして実行すると、指定したコマンドが実行が完了するまでバックグラウンドで実行されます。
画面を開始してからコマンドを実行し、次にデタッチすると、-dmSを使用してコマンドを実行した場合と同じ動作になります。画面を起動してCtrl-A+d
でデタッチすることで、ゲームサーバーや長いジョブを実行することがよくあります
オプションの詳細情報については、man screen
のマニュアルページを確認することもできます。