2011-07-08 7 views
0

私はjava jarファイルを呼び出してアプリケーションを実行するシェルスクリプトを持っています。これを回避する方法はないので、私が持っているものと仕事をしなければなりません。BASH:Initスクリプトとしてのシェルスクリプト

このシェルスクリプトを実行すると、アプリケーションのステータスが出力され、そこにのみ置かれます(ほとんどコンソールです)。だから何かがプログラムに起こると、それは画面を更新する。これは、通常の非デーモン/バックグラウンドプロセスと同様です。そこから抜け出る唯一の方法はctrl-cで、プロセスを完全に終了します。私はpath_to_shell_script/script.sh &を実行してこの問題を回避できることを知っています。私のセッションでバックグラウンドになるでしょう(ログアウトしたい場合はnohupを使うことができます)。

私の問題は、このスクリプトをinitスクリプトに入れる方法がわかりません。ほとんどのinitスクリプトは書かれていますが、デーモン化しようとするとうまくいきません。私はほとんどそれを働かせました、しかし、私はinitscriptを実行するとき、実際には、スクリプト上の同じ "コンソール"に及んで、私がctrl-cを押すまでそこに座っています。ここで問題になっている行があります:

daemon ${basedir}/$prog && success || failure

問題は、私は私が問題に実行しているところだと思いませ背景だけdaemon ${basedir}/$prog部分ができ、ということです。誰かがシェルスクリプト用のinitスクリプトを作成するのに成功していますか?また、このシェルスクリプトはデーモン化可能ではありません(バックグラウンド化できますが、基礎となるプログラムはデーモン化オプションをサポートしていません。

答えて

1

実行するには、サブシェルを開く必要があります。また、出力をファイル、または少なくとも/ dev/nullにリダイレクトするのに役立ちます。

ような何か:

#!/bin/bash 
( 
    { daemon ${basedir}/$prog && success || failure ; } &>/dev/null 
) & 
exit 0 

背景サブシェルに(リスト)&を次のように動作します。 {list}はグループコマンドで、コマンドのすべての出力をキャプチャして/ dev/nullに送るためにここで使用されます。

0

私は、ハーフライフサーバーと私のカスタム "tail logfile" bashスクリプトのようなものを実行するために、最初に分離したスクリーンセッションで成功しました。

は、バックグラウンドで何かを起動するには:

screen -dmS arbitarySessionName /path/to/script/launchService.sh 

プロセスを見て:

# screen -r arbitrarySessionName 

はあなたがこの便利な、GLを見つけることを願って!

関連する問題