Screenにコマンドを実行させてから切り離すにはどうすればよいですか(つまり、最初にスクリプトを起動する以上の入力がなくても、自動的に1つのスクリプトで)。例えばmyscript.shを実行すると、自動的にスクリーンセッションが開始され、コマンドが実行されてから切り離されます。
これは簡単なことです。
screen -d -m yourcommand
画面内で単一のコマンドを実行して切り離すには、次のようにします。
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
「sleepy」という名前のバックグラウンドで新しいセッションを開始するため
screen -S sleepy -dm sleep 60
「眠い」セッションを終了するために
screen -S sleepy -X quit
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
プログラムを終了するためにコントロール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"