CSHスクリプトとコマンドにいくつか問題があります。
set XVFBCHK2 = `pgre -f 'Xvfb' | wc -l`
一貫性のない値を返すようです。1を返す必要がある場合は0を返します。grep関数が速すぎるため、コマンドラインに続くXvfbの新しいインスタンスをキャッチしません。
Xvfb :1 -screen 0 1600x1200x16 >& /dev/null &
たとえば、この一連のCSHスクリプトでは:
if ( $XVFBCHK == 0 && $FIJICHK == 0 ) then
set DISP=0
set SCREEN=0
Xvfb :1 -screen 0 1600x1200x16 >& /dev/null &
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 1 ) then
set DISP=1
set SCREEN=0
else if ( $XVFBCHK2 == 0 ) then
Xvfb :2 -screen 0 1600x1200x16 >& /dev/null &
set DISP=2
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :3 -screen 0 1600x1200x16 >& /dev/null &
set DISP=3
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :4 -screen 0 1600x1200x16 >& /dev/null &
set DISP=4
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :5 -screen 0 1600x1200x16 >& /dev/null &
set DISP=5
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
setenv DISPLAY :$DISP.$SCREEN
elseif
echo $XVFBCHK2
echo $DISP
次の出力を取得できます。
0
0
3
3
3
3
3
Xvfbは3回実行されたようですが、pgrepは3回目まで実行をキャッチしませんでした。最初の試行をキャッチするか、最初の試行Xvfb:1が失敗し、次にXvfb:2を試行する必要があることを正確に判断するにはどうすればよいですか?