Как сделать параллельную обработку в Сценарии оболочки Unix?

У меня есть сценарий оболочки, который передает файл 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 задачу в фоне, поскольку в этом случае пользователь не узнает, когда задача будет завершена, который крайне важен для этого сценария.

Вы могли предложить, чтобы что-нибудь достигло этого?

5
задан Mat 22 September 2012 в 07:02
поделиться

2 ответа

Создайте этот скрипт (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 не будет показан.

Я бы назвал это мониторингом задач, а не "параллельной обработкой" :)

3
ответ дан 15 December 2019 в 00:53
поделиться

Это только убьет запущенный процесс 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
1
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: