Мониторинг состояния задачи сценария оболочки - PullRequest
1 голос
/ 19 мая 2010

Я запускаю задачу ANT в фоновом режиме и проверяю с интервалом в 60 секунд, завершена ли эта задача или нет. Если это не так, каждые 60 секунд на экране должно отображаться сообщение: «Процесс развертывания все еще выполняется. Секунды $ slept с момента запуска развертывания», где $ slept равен 60, 120, 180 n и т.

Существует ограничение в 1200 секунд, после чего сценарий будет показывать журнал с помощью команды 'ant log' и спрашивать пользователя, продолжать ли. Если пользователь выбирает продолжить, к ограничению времени добавляется 300 секунд, и процесс повторяется.

Код, который я использую для этой задачи, -

ant deploy &

limit=1200
deploy_check()
{
while [ ${slept:-0} -le $limit ]; do
    sleep 60 && slept=`expr ${slept:-0} + 60`
    if [ $$ = "`ps -o ppid= -p $!`" ]; then
        echo "Deploy process is still running. $slept seconds since deploy started."
    else
        wait $! && echo "Application ${New_App_Name} deployed successfully" || echo "Deployment of ${New_App_Name} failed"
        break
    fi
done
}

deploy_check

if [ $$ = "`ps -o ppid= -p $!`" ]; then
   echo "Deploy process did not finish in $slept seconds. Here's the log."
   ant log
   echo "Do you want to kill the process? Press Ctrl+C to kill. Press Enter to continue."
   read log
limit=`expr ${limit} + 300`
   deploy_check
fi

Теперь проблема в том, что этот код не работает. Это выглядит как очень хороший код, и все же, это не работает. Может кто-нибудь указать, что не так с этим кодом, пожалуйста.

1 Ответ

1 голос
/ 19 мая 2010

Если пользователь выбирает продолжить, deploy_check запускается снова, но у пользователя больше нет возможности продолжить или отменить (хотя Ctrl-C можно нажать в любое время). Так что вы можете захотеть обернуть это в while цикл.

Кроме того, нажатие Ctrl-C, вероятно, не приведет к остановке дочернего процесса. Вам нужно запросить «да» или «нет», и если «да», выполните kill $!.

Edit:

Вот как работает ваш код:

  • Вызовите deploy_check
    • Цикл, пока время сна не превысит предел (в этот момент будет 1260)
    • Перерыв в случае успешного развертывания
  • Если он все еще работает, подскажите пользователю
  • Если пользователь нажимает Ctrl-C, сценарий завершается, но ant deploy остается запущенным (если в другом месте вашего сценария не установлена ​​ловушка, которая обрабатывает Ctrl-C и kill в процессе ant deploy )
  • Если пользователь нажимает ввод, предел увеличивается до 1500
  • Вызовите проверку deploy_check в спящем режиме == 1260 против лимита == 1500
    • Цикл, пока время сна не превысит предел (в этот момент будет 1560)
    • Перерыв в случае успешного развертывания
  • Сценарий (или этот его раздел) заканчивается без запроса пользователя снова

Вам потребуется цикл, чтобы снова вызвать приглашение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...