2010-08-16 3 views
2

Я новичок в сценариях Bash, но я быстро учащийся. Как правило. Я пытаюсь написать сценарий, чтобы убить и перезапустить экземпляр Hudson - его нужно перезапустить, чтобы получить изменения в переменных среды. То, что я до сих пор:Сценарий Bash, чтобы убить и перезапустить Hudson

#!/bin/bash 
h=`pgrep -f hudson` 
if test "$h" != ""; then 
    kill $h 
    while [ "$h" != "" ]; do 
    sleep 1 
    unset h 
    h=`pgrep -f hudson` 
    done 
fi 
java -jar ~/hudson/hudson.war & 

Скрипт правильно определяет идущее PID Hudson экземпляра и убивает его. Однако он просто ждет после строки «kill» и не продолжит работу. Если я ударил ключ там, он завершает уничтожение процесса и выходит из сценария, даже не доходя до цикла while. Ясно, что я пропустил что-то о том, как процесс должен быть убит. Дело не в том, что процесс Хадсона вешен и не реагирует на «убить»; он выходит нормально, только пока я не вмешаюсь.

Я также уверен, что это может быть намного более эффективным, но прямо сейчас я просто хотел бы понять, где я ошибаюсь.

Заранее спасибо.

ответ

4

Это представляет некоторые простые улучшения вашего сценария:

#!/bin/bash 
h=$(pgrep -f hudson) # $() is preferred over backticks 
if [[ -n $h ]]; then # this checks whether a variable is non-empty 
    kill $h 
    while [[ -n $h ]]; do 
    sleep 1 
    h=$(pgrep -f hudson) # it's usually unnecessary to unset a variable before you set it 
    done 
fi 
java -jar ~/hudson/hudson.war & 

Однако, вполне вероятно, что это все, что вам нужно (или использовать предоставленный объект, который mrooney referred to):

while pkill hudson; do sleep 1; done 
java -jar ~/hudson/hudson.war & 
+0

Спасибо за советы bash и, очевидно, лучший рефактор. – AndrewRich

2

Как о том, с Хадсоном, и пусть он выключится. Я нашел следующее заявление в Hudson forum:

Я добавил http://server/hudson/exit в 1.161. Доступ к этому URL-адресу приведет к отключению виртуальной машины, которая запускает Hudson.

Вы можете вызвать URL-адрес с помощью wget. Вы все равно можете убить Хадсона, если он не выключится в соответствующее время.

EDIT: Я просто наткнулся на another thread, с интересными вариантами перезагрузки. Он использует команды сборки на сервере Winstone. Не уверен, что он подберет изменения в переменных среды.

+0

Спасибо за дополнительную информацию. Это будет полезно. – AndrewRich

Смежные вопросы