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

command-line gnu-screen script

どのようにしたら screen にコマンドを実行させてから切り離すことができますか? 例えば myscript.sh を実行すると、自動的にスクリーンセッションが開始され、コマンドが実行されてから切り離されます

  109  darkfeline  2012-07-29


ベストアンサー

これは簡単なことです

screen -d -m yourcommand

スクリーンユーザーズマニュアルより

d -d -m デタッチドモードで画面を起動します。これは新しいセッションを作成しますが、それにはアタッチしません。これはシステム起動スクリプトに便利です

155  Alan Curry  2012-07-29


画面内で単一のコマンドを実行してデタッチするには、試してみてください

screen -dm sleep 10

複数のコマンドを実行するには、試してみてください

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

プログラムが終了すると、そのプログラムを含んでいたウィンドウがスクリーン(デフォルトで)で強制終了してしまうので注意してください

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

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

すべてのセッションをリストアップするには、試してみてください

screen -list

関連しています。Unixの画面を起動し、コマンドを実行し、デタッチを行う

56  kenorb  2012-07-29


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

screen -S sleepy -dm sleep 60

眠い」セッションを殺すために

screen -S sleepy -X quit

23  Michal Zmuda  2016-11-06


screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'

5  tkjef  2018-03-14


コントロール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を使うと便利だと思います

to edit cron, execute:
crontab -e

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

1  Shimon Doodkin  2019-04-29


ここでは、画面内のプロセスを実行し、端末から切り離してから再アタッチするまでの手順を説明します

  1. コマンドプロンプトから、screenを実行してください。これにより、新しいサブシェルが表示されます

  2. 希望のプログラムを実行します

  3. キー配列 Ctrl-a Ctrl-d を使ってスクリーンセッションから切り離す (すべての screen キーバインドは Ctrl-a で始まることに注意)。これで元のシェルに戻り、「[detached]」というメッセージが表示され、スクリーンセッションがまだ実行中であることを示します

  4. そして、screen -listを実行することで、利用可能なスクリーンセッションをリストアップすることができます

  5. screen -rを実行することで、このスクリーンセッションに再アタッチすることができます。再アタッチすると、元の場所に戻ることができ、アタッチされている間に画面に出力された出力を見ることができます。複数のスクリーンセッションがある場合は、screen -rの引数にtty名(screen -listで表示される)を指定することで、特定のセッションにアタッチすることができます

ソース

0  Vinnie James  2020-09-11


タイトルとURLをコピーしました