У меня есть сценарий оболочки, который передает файл build.xml удаленной машине Unix (devrsp02) и выполняет задачу Ant wldeploy на той машине (devrsp02). Теперь, эта wldeploy задача занимает приблизительно 15 минут для завершения и в то время как это работает, последняя строка в консоли Unix -
"задача {некоторая цифра} инициализированный".
После того как эта задача завершена, мы получаем "задачу, Завершенное" сообщение и следующая задача в сценарии выполняются только после этого.
Но иногда, могла бы быть проблема с weblogic доменом, и развертывание могло бы перестать работать внутренне без эффекта на состояние wldeploy задачи. Консоль Unix все еще застрянет в "задаче {некоторая цифра} инициализированный". Ошибка развертывания будет добираться, вошел в систему файл, названный output.a
Так, что я хочу, теперь -
Запустите счетчик времени прежде, чем выполнить wldeploy. Если выполнения wldeploy больше 15 минут, следующая команда должна быть выполнена -
хвост-f output.a ##, не завершая wldeploy
или
кошка output.a ## после завершения wldeploy сильно
Точка, которая будет отмечена вот, - я не могу выполнить wldeploy задачу в фоне, поскольку в этом случае пользователь не узнает, когда задача будет завершена, который крайне важен для этого сценария.
Вы могли предложить, чтобы что-нибудь достигло этого?
Создайте этот скрипт (deploy.sh
например):
#!/bin/sh
sleep 900 && pkill -n wldeploy && cat output.a &
wldeploy
Затем из консоли
chmod +x deploy.sh
Запустите
./deploy.sh
Этот скрипт запустит счетчик (15 минут), который принудительно убьет процесс wldeploy
, если он запущен, а если процесс был запущен, то вы увидите содержимое output.a
.
Если сценарий завершился, то pkill
не вернет true и output.a
не будет показан.
Я бы назвал это мониторингом задач, а не "параллельной обработкой" :)
Это только убьет запущенный процесс wldeploy, сообщит вам, вернул ли wldeploy успех или неудачу, и запустится не более чем через 30 секунд после завершения wldeploy.
Он должен быть совместим с sh, но в /bin/sh, к которому у меня сейчас есть доступ, похоже, сломана команда wait.
#!/bin/ksh
wldeploy &
while [ ${slept:-0} -le 900 ]; do
sleep 30 && slept=`expr ${slept:-0} + 30`
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo wldeploy still running
else
wait $! && echo "wldeploy succeeded" || echo "wldeploy failed"
break
fi
done
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo "wldeploy did not finish in $slept seconds, killing it"
kill $!
cat output.a
fi