web-dev-qa-db-ja.com

画面でコマンドを実行してデタッチする方法

Screenにコマンドを実行させてから切り離すにはどうすればよいですか(つまり、最初にスクリプトを起動する以上の入力がなくても、自動的に1つのスクリプトで)。例えばmyscript.shを実行すると、自動的にスクリーンセッションが開始され、コマンドが実行されてから切り離されます。

70
darkfeline

これは簡単なことです。

screen -d -m yourcommand
104
Alan Curry

画面内で単一のコマンドを実行して切り離すには、次のようにします。

screen -dm sleep 10

複数のコマンドを実行するには、

screen -dm bash -c "sleep 10; myscript.sh"

プログラムが終了すると、screen(デフォルト)はそれを含んでいたウィンドウを消します。

スクリプト終了後にセッションを強制終了したくない場合は、最後にexec shを追加してください。

screen -dm bash -c 'sleep 5; exec sh'

すべてのセッションを一覧表示するには、次のことを試してください。

screen -list

関連: Unixスクリーンを起動し、コマンドを実行し、切り離します

42
kenorb

「sleepy」という名前のバックグラウンドで新しいセッションを開始するため

screen -S sleepy -dm sleep 60

「眠い」セッションを終了するために

screen -S sleepy -X quit      
15
Michal Zmuda
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
3
tkjef

プログラムを終了するためにコントロールc(sig int)を押したときに起こります。それはすべてのbashからずっと終了します。だから私はこれをSIGINTをキャッチすることがわかった。そして最後のbashから出るのを防ぎます。 (終了するにはexitと入力する必要があります)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

起動時にnodejsプログラムを実行するのにcronを使用すると便利です。起動時に画面を実行します。 cronには特別なイベント構文@reboot eventがあります

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
0
Shimon Doodkin