私は、デタッチされた画面でbashスクリプトを実行したいです。スクリプトはプログラムを数回呼び出しますが、そのたびに待機に時間がかかりすぎます。最初に考えたのは、単に画面を開いてスクリプトを呼び出すことでしたが、ctrl-a d
スクリプトの実行中はデタッチ(によって)できないようです。そこで、調査してこれを見つけました。命令シェバンを次のように置き換えます。
#!/usr/bin/screen -d -m -S screenName /bin/bash
しかし、それも機能しません (オプションが認識されません)。何か提案はありますか?
PS 今、それがscreen -dmS name ./script.sh
私の目的にはおそらく有効だと思いましたが、これをスクリプトにどのように組み込むかについてはまだ興味があります。ありがとうございます。
答え1
のシバンご覧になった行は、一部の Unix バリアントでは機能しますが、Linux では機能しません。Linux のシェバン行には制限があり、オプションは 1 つしか持てません。文字列全体が、別々の単語として渡されるのではなく、-d -m -S screenName /bin/bash
単一のオプションとして に渡されます。screen
スクリプトを screen 内で実行し、複数のファイルや引用符を扱わずに済ませたい場合は、スクリプトを、まだ screen 内にない場合は screen を呼び出すシェル スクリプトにすることができます。
#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
答え2
screen のマニュアルページによると:
screen -d -m
画面をデタッチ モードで起動します。これにより、新しいセッションが作成されますが、そのセッションには接続されません。これは、システム起動スクリプトに便利です。-S sessionname
新しいセッションの名前を sessionname に設定します。
したがって、提供されたコマンドを実行すると、次のようになります。screen -dmS name ./script.sh
Screen は name というウィンドウを起動し、自動的に script.sh を実行します。そこに戻ってステータスを確認するには、次のように入力します。screen -r test
Ubuntu 14.04 では、コマンドが若干異なります。以下を試してください。
screen -d -m -S test
スクリプトを実行するには、設定ファイルに移動する必要があります。
sudo vim /etc/screenrc
そこに到着したら、一番下までスクロールすると次の内容が表示されます。
# Example of automatically running some programs in windows on screen startup.
#
# The following will open top in the first window, an ssh session to monkey
# in the next window, and then open mutt and tail in windows 8 and 9
# respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log
これは、実行するスクリプト名を追加するセクションであり、これにより、画面から必要なすべての操作を実行できるようになります。
答え3
これは少し古いですが、これを行うために私が見つけた数少ないスレッドの1つです。試してみたところ、Ubuntu 14でこれを分離モードで実行する唯一の方法は、
screen -d -m -t nameofwindow sh nameoflaunch.sh
起動は、現在の Java コマンドとサーバー バージョンが格納されている上記の 2 番目の部分になります。私はバニラを実行します。