スクリプトの実行後、Screenセッションは閉じられません。

スクリプトの実行後、Screenセッションは閉じられません。

画面コマンドを含むbashファイルを作成しました。次に、サブプロセスを使用してPythonスクリプトからbashファイルを呼び出します。すべてがうまくいきます。ただし、スクリプトが正常に実行された後でも、screenセッションは閉じずに開いたままになります。これは歓迎されない行動です。

以下はbashファイルの例です。

#!/bin/bash
VIRTUAL_ENV_DISABLE_PROMPT=true
source generic_path/bin/activate
cd generic_directory
screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R\n"

画面コマンドで何かを変更する必要があるようですが、そうですか?スクリプトの実行後にスクリーンセッションが自動的に閉じるように変更する必要があることをお勧めしますか?

答え1

次のようなものを実行するとき

screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R\n"

端末に一連の文字を送信します(以前に作成した画面で)Rscript script_1.R\n。これにより、シェルはコマンドを実行し、次のコマンドを待ちます。

Rscript script_1.R && exitコマンドが正常に完了したら、シェルにシャットダウンを要求するなどの操作を実行する必要があります(シェル構文に合わせて調整)。

screen -dmS session_1
screen -S session_1 -X stuff "Rscript script_1.R && exit\n"

とにかくウィンドウを作成し、「リモートコントロール」する必要はありません。画面にコマンドの実行を要求するだけです。

screen -dm Rscript script_1.R

最後に画面を使ってバックグラウンドでスクリプトは私が聞いたことの最も奇妙なアイデアの一つです。 (お客様のニーズに応じて)cronまたは代わりに使用してください。at&

「Rscript」が単純なランダムな例ではない場合は、次をお読みください。コマンドラインからRスクリプトを実行する

R CMD BATCH script_1.R &

答え2

スクリプトを「予約」するには、「Crontab」が良いソリューションになると思います。別の解決策は、バックグラウンドモード(&使用)でスクリプトを実行することです。

答え3

本当に良いです。実際にセッションを開いておく方法を探していましたが、これは逆の問題です。

セッションの作成、コマンドの開始、コマンドの実行後にセッションを閉じるには、次のようにします。

screen -dmS session_name "command"

関連情報