web-dev-qa-db-ja.com

スクリーンセッションを開始し、スクリプトをアタッチせずに実行しますか?

スクリプトを作成しようとしています:

  1. 新しいscreenセッションを開始します
  2. その新しいスクリーンセッション内でプログラムまたはスクリプトを実行する
  3. スクリーンセッションからデタッチしますが、ステップ2のプログラムはまだ実行されている可能性があります。ステップ2のプログラムがすぐにまたは後で終了した場合、画面セッションは実行されたまま(切り離された状態)になります。

私はscreen -X programまたはscreen -S somenameオプションと組み合わせてscreen -Dまたは-dに続いてprogramに続いて-mを組み合わせて、あらゆる種類の組み合わせを試してきました。関連する質問と回答を見つけましたが、何も機能しません。

私が得ることができた最も近いものはこれでした:

screen -S MySessionName -d -m myprogram

これにより、myprogramを実行して、バックグラウンドで新しいスクリーンセッションが開始されます。 myprogramが終了する(すぐに)場合を除き、screenセッションは終了しますが、実行し続けたいと思います。

1
RocketNuts

方法1

ここで説明したデモセットアップをマシンで作成しました。あなたが報告した問題にも直面しました。しかし、scriptの小さな行を追加すると、私の問題は解決しました。

myprogramの最後に次の行を追加しました

exec $Shell

スクリプトが終了すると、Bashプロセスはそれ自体を新しい呼び出しに置き換えます。

方法2

または、最初にdetached screenを開始し、stuffを使用してその画面にコマンドを送信する次の方法を試すことができます

このためには、デタッチされた画面を開始する必要があります。

screen -dmS MySessionName

そして、その画面にスクリプトを送信します。

screen -S MySessionName -p 0 -X stuff 'myprogram\n'

これもうまくいきました。

5
Rooney