web-dev-qa-db-ja.com

GNU画面でプログラムを実行し、その後すぐにデタッチします

システムの起動時にGNU Screenセッションでプログラムを開始するスクリプトを作成する方法を見つけようとしています。私はこれを試しています:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

しかし、セッションはすでに切り離されているため、コマンドを実行できませんか?私が必要とする唯一のものは、スクリーンセッションでコマンドを実行し、このセッションをすぐに切り離します。

答えてくれてありがとう、しかし今私は別の問題に直面しました。 「program and program2」にいくつかの変数を配置した後、スクリプトが機能しなくなります。このようなもの:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

何らかの理由で「-f config.cfg」が無視されました。私もコマンドを引用しようとしましたが、あまり役に立ちません。

26
TbMa

行末に\を挿入するつもりでしたか?そうでない場合は、それらを削除してみてください-次の文字をエスケープします。

また、-Xをドロップすると、セットアップの作業が容易になります。たとえば:

screen -S test -d -m -X touch /tmp/test

ただし、No screen session foundで失敗します:

screen -S test -d -m touch /tmp/test

正常に動作します。そういうものとして、私は以下があなたのために働くと思う:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

起動時にこれを実行すると、$ HOMEは特定のユーザーとしてログインした後と同じではないことに注意してください。特定のユーザーとして実行する必要がある場合は、suなどを使用してそのユーザーとして実行する必要があります。フルパスを指定すると、あいまいさがなくなります。

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

または、上記のスクリプト全体をsu - username /path/to/your/scriptとして呼び出します。

33
Cry Havok

Cry Havokが言及したように、プログラムをコマンドラインに配置できます。

本当に-Xオプションを使用する必要がある場合は、a) 'screen'コマンドを指定する必要があり、b)セッションが事前に存在している必要があります。

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2
4
Arcege