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


25

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

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

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

PS screen -dmS name ./script.shたぶん、私の目的にはおそらく役立つと思いますが、これをスクリプトに組み込む方法についてはまだ興味があります。ありがとうございました。

回答:


28

シェバングのあなたには、いくつかのUNIX上で動作して見てきたライン変異体ではなく、Linux上で。Linuxのシバンラインは限られています。1つのオプションしか持てません。文字列全体-d -m -S screenName /bin/bashscreen、異なる単語として渡されるのではなく、に単一のオプションとして渡されます。

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

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

それはうまく機能します、"$0"ここで何がありますか?
ファビック16

4
@Lordofdarkこれがスクリプト名です。スクリプトは、screenどれが/bin/bashどのスクリプトを再度呼び出すかを呼び出します。
ジル 'SO-悪であるのをやめる'

16

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

  • 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

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


どういうわけか、そのコマンド(screen -dmS ...)は実際には機能しませんが、機能しません。それを実行すると、screen -lsソケットが見つかりません。考え?
ボンバン

どのディストリビューションを使用していますか?
リエカヨ

NAME = "Ubuntu" VERSION = "14.04.1 LTS、Trusty Tahr"と思います。これは仮想マシンです。
ボンバン

私はちょうど仕事を辞めて、病気でも私のマシンでスクリーンを使用しようとするので、ちょっとGimme 14.04
ryekayo

@bongbang-どのバージョンの画面がありますか?
slm

3

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.