9

バックグラウンドでサービスを実行し、スクリプトを終了してコマンドラインに移動するbashスクリプトを作成しました。ただし、evalコマンドを実行した後、controlは次のステートメントに進みません。

COMMAND="nohup java -jar jenkins.war"
echo "starting service"
eval $COMMAND
echo "service running"
exit

「サービス実行中」をエコーし​​、終了することはありません。プロセスをバックグラウンドで実行し、サービスの実行中にコマンドプロンプトに戻りたい。どうすればよいですか?

4

4 に答える 4

15

引数を含むコマンドを文字列に入れないでください。コマンドとその引数を配列に入れ(大文字の変数名は使用しないでください。これは非常に悪い習慣です)、を使用しないevalでください。eval悪です!

command=( nohup java -jar jenkins.war )
echo "starting service"
"${command[@]}" 2> /dev/null &
echo "service running"

&コマンドをバックグラウンドで実行することです。

于 2012-12-27T22:08:56.080 に答える
3

通話の最後にアンパサンドを追加します。

eval $COMMAND &
于 2012-12-27T22:07:24.317 に答える
3

試す:

command="java -jar jenkins.war"
echo "starting service"
$command </dev/null >jenkins.out 2>jenkins.err &
echo "service running"
于 2012-12-27T22:32:52.697 に答える
2

evalはその問題を解決しません。「バックグラウンドで実行」文字、つまり「&」(引用符なし)が必要です。

行を次のように書き直します

 #eval $COMMAND
 $COMMAND &

$ COMMANDに実際に何があるかによっては、元にeval戻す必要がある場合があります。

また、必要に応じて、プロセスをバックグラウンドで実行すると、いくつかのjobs出力が生成されます。

[1]     10079

コンソールの標準エラーへ。/ dev / nullにリダイレクトするには、追加の構文が必要です。次に例を示します。

COMMAND="sleep 10"
{ $COMMAND & ; } 1>/dev/null 2>&1

プロセスグループを使用する({ .... ; }問題が発生することはありませんが、発生する可能性があります。

IHTH

于 2012-12-27T22:05:26.807 に答える