Скрипт Bash, чтобы убить и перезапустить Гудзон - PullRequest
2 голосов
/ 17 августа 2010

Я новичок в скриптах 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. Очевидно, я что-то упускаю из-за того, как этот процесс должен быть убит. Дело не в том, что процесс Гудзона зависает и не отвечает «убить»; он выходит нормально, только не до тех пор, пока я не вмешаюсь.

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

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

Ответы [ 3 ]

4 голосов
/ 17 августа 2010

Это несколько простых улучшений вашего скрипта:

#!/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 ссылается на ):

while pkill hudson; do sleep 1; done
java -jar ~/hudson/hudson.war &
2 голосов
/ 17 августа 2010

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

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

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

РЕДАКТИРОВАТЬ: Я только что наткнулся на другой поток , с интересными вариантами перезапуска. Используются команды сборки на сервере Winstone. Не уверен, что получит изменения в переменных окружения.

0 голосов
/ 17 августа 2010

Если вы используете Hudson через RPM, он уже поставляется со скриптом инициализации. Если нет, я бы посмотрел на них и увидел, можете ли вы основать на них свой скрипт: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main/rpm/SOURCES/ (guest // guest).

...