1

bash の stout と stderr をそれぞれ個別のファイルにリダイレクトする必要があります。さて、私はこのコマンドを完了しました:

  ((/usr/bin/java -jar /opt/SEOC2/seoc2.jar 2>&1 1>&3 | ティー --append /opt/SEOC2/log/err.log) 3>&1 1>&2 | ティー --追加 /opt/SEOC2/log/app.log) >> /opt/SEOC2/log/combined.log 2>&1 &

コマンドラインから実行すると正常に動作します。

まったく同じコマンドをbashスクリプトに入れようとしています

...
 12 cmd="(($run -jar $cmd 2>&1 1>&3 | tee --append $err) 3>&1 1>&2 | tee --append $log) >> $combined 2>&1"
 ...
 30 echo -e "サービスを開始しています..."
 31 $cmd &
 32 pid=`ps -eo pid,args | grep seoc2.jar | grep -v グレップ | カット -c1-6`
 33 の場合 [ ! -z $pid ]; それから
 ...

次のようなエラーが発生します。

   root@operator:/opt/SEOC2# seoc2 スタート
   サービスを開始しています...
   /usr/local/bin/seoc2: 31行目: ((/usr/bin/java: dir or file does not exist

このコマンドを $( )、` ` などでカバーしようとしましたが、まったく効果がありません :(

すでに何時間も遊んでいるので、提案やアドバイスをいただければ幸いです:/

どうもありがとうルネ

4

1 に答える 1

2

コマンドライン全体を変数に格納する場合は、evalそれを実行するために使用する必要があります。

cmd="(($run -jar $cmd 2>&1 1>&3 | tee --append $err) 3>&1 1>&2 | tee --append $log) >> $combined 2>&1"
...
eval $cmd &
于 2012-07-18T14:05:46.337 に答える