web-dev-qa-db-ja.com

画面でスクリプトを実行する

デタッチ画面でbashスクリプトを実行したいのですが。スクリプトはプログラムを数回呼び出しますが、それぞれが待機するには時間がかかりすぎます。私の最初の考えは、単に画面を開いてからスクリプトを呼び出すことでしたが、スクリプトの実行中は(ctrl-a dで)切り離せないようです。だから私はいくつかの研究をして、これを見つけました 指示 シバンを次のものに置き換えます:

#!/usr/bin/screen -d -m -S screenName /bin/bash

しかし、それも機能しません(オプションは認識されません)。助言がありますか?

PS screen -dmS name ./script.shがおそらく私の目的のために機能する可能性があるということを今ちょうど私は思いますが、私はこれをスクリプトに組み込む方法にまだ興味があります。ありがとうございました。

26
bongbang

ご覧になった Shebang 行は、一部のUNIXバリアントでは機能する可能性がありますが、Linuxでは機能しない可能性があります。 Linuxのシバン行は制限されています。選択肢は1つだけです。文字列全体-d -m -S screenName /bin/bashは、別の単語として渡されるのではなく、screenに単一のオプションとして渡されます。

画面内でスクリプトを実行し、複数のファイルや引用符をいじったりしない場合は、スクリプトをシェル画面にして、まだ画面内にない場合に画面を呼び出すことができます。

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

画面のマニュアルページによると:

  • screen -d -mデタッチモードの開始画面。これにより新しいセッションが作成されますが、アタッチされません。これは、システム起動スクリプトに役立ちます。
  • -S sessionname新しいセッションの名前をsessionnameに設定します。

だから私があなたが提供したコマンドを実行したとき:screen -dmS name ./script.sh

画面は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

これは、実行するスクリプト名を追加する必要があるセクションであり、画面から必要なすべてを実行できます。

17
ryekayo

これは少し古いですが、これを行うために見つけることができる数少ないスレッドの1つです。じっくり遊んだ後、ubuntu 14でこれをデタッチモードで実行する唯一の方法は、

screen -d -m -t nameofwindow sh nameoflaunch.sh

起動は、現在のJavaコマンドとサーバーバージョンを格納する上記の2番目の部分です。私はバニラを実行します。

5
ProjectEd