2013-02-28 1 views
0
stop() 
{ 
sh stop.sh 
ret_code=$? 
<1>echo ret_code is $ret_code 
} 

once=true 
while $once 
do 
stop & PID=$! 
<2>echo ret_code is $ret_code 
sleep 2m 
<3>echo ret_code is $ret_code 
if [ $ret_code == 0 ] 
then 
break 
else 
kill $PID 
fi 
done 

ret_code в < 1> 0Unix код возврата меняется после того, как команда сна

ret_code на < 2> не печатает

ret_code на < 3> пустой

Может кто-то сказать почему значение ret_code изменяется во время и после команды sleep?

EDIT:

Я попробовал альтернативный подход. Он работал -

#! /bin/sh 

once=true 
while $once 
do 
sh stop.sh & PID=$! 
sleep 2m 
kill $PID 
if [ $? != 0 ] 
then 
echo stop has completed successfully within the time limit 
echo starting ... 
sh start.sh 
break 
fi 
done 
+0

1) Что такое stop.sh на линии 3? –

+0

2) Можете ли вы настроить выражения эха, чтобы они включали «1.», «2.» и т. д. и включить вывод сценария, пожалуйста? –

+0

@AshBerlin Это еще один сценарий оболочки, который фактически останавливает службы. Обычно он работает нормально, поэтому rc обычно равен 0. Но иногда он застревает, и, следовательно, этот сложный способ написания простого процесса stop/start – Jay

ответ

1

stop, как фоновый процесс, работает в подоболочки, поэтому значение ret_code, что отличает это отличается от того, вы проверяете в < 2> и < 3> (которые должны быть одинаковыми , поскольку его значение не зависит от команды sleep).

+0

Я вижу! Есть ли способ использовать переменную в подоболочке? – Jay

+0

Игнорировать предыдущий глупый комментарий :) - Я мог бы просто экспортировать переменную из подоболочки, чтобы использовать ее в основной оболочке? – Jay