実行中のコマンドを終了した後でも画面を実行し続けるにはどうすればよいですか?

実行中のコマンドを終了した後でも画面を実行し続けるにはどうすればよいですか?

私の使命は、別々のセッションを開始してからscreen(システムの再起動時に)セッションに接続し、実行中のプロセスを中断/終了することです。いいえ画面が終了します。残念ながら、screenセッションに接続して実行中のコマンドを停止すると、セッション全体がscreen終了します。

[screen is terminating]

分離を開始するには、次のコマンドを使用しますscreen

screen -dm -S screen_name /bin/bash -c 'cd ~/mydir; npm start'

次に、次をscreen使用してセッションに接続します。

screen -r session_name

これによりCtrl-Cコマンドnpmbash終了し、画面が終了します。

npm私が望むのは、内部で手動でセッションを開始したかのように画面に接続されたときに同様の動作を達成することですscreen

screen -S session_name

その後、セッションでscreen

cd ~/mydir
npm start

その後、セッションを終了せずにコマンドを実行できますCtrl-Cnpmscreen

ベストアンサー1

これが私が得た解決策です。

#!/bin/bash -il

# To install:
#   - put this file somewhere in your home directory like ~/start-screens
#   - chmod a+x ~/start-screens
#   - run "crontab -e" and add this line:
#     @reboot /bin/bash -li ~/start-screens

start() { screen -s "/bin/bash" -dmS "$1"; screen -S "$1" -X stuff "$2\n$3\n"; }

start service1 "cd dir1" "node index.js"
start service2 "cd dir2" "node index.js"

魔法はstart() { ... }関数内の2つのコマンドにあります。次の行は画面を起動し、バックグラウンドで実行します。

screen -s "/bin/bash" -dmS "$1";

この行は、まるで画面に直接入力するかのようにコマンドを送信します。

screen -S "$1" -X stuff "$2\n$3\n";

また、次のようないくつかの追加機能もあります。

  • 2つのコマンド($ 2と$ 3)を実行するので、画面を閉じて上矢印をクリックすると最新のコマンド(サーバーの実行)に移動し、Enterキーを押して再実行できます。
  • crontabで再起動時に追加する方法を教えてください(@reboot /bin/bash -li ~/start-screens)。
  • シェルを実行しますインタラクティブにそして全力を尽くすログイン環境、使用-liフラグ。私のテストでは、#!/bin/bash -licrontabとcrontabの両方にこれが必要なようですが、@reboot /bin/bash -liYMMVです。
  • このスクリプトでは、複数のサービスを実行できます。 :)

おすすめ記事