2

私は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 &

スクリプトは、実行中のHudsonインスタンスのPIDを正しく判別し、それを強制終了します。ただし、「kill」行の後で待機するだけで、続行しません。そこでキーを押すと、プロセスの強制終了が完了してスクリプトが終了し、whileループに到達することさえありません。明らかに、プロセスを強制終了する方法について何かが欠けています。ハドソンのプロセスがハングしていて、「キル」に応答していないわけではありません。私が介入するまで、それは正常に終了します。

また、これははるかに効率的である可能性があると確信していますが、今はどこが間違っているのかを理解したいと思います。

前もって感謝します。

4

3 に答える 3

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が参照する提供された機能を使用します)。

while pkill hudson; do sleep 1; done
java -jar ~/hudson/hudson.war &
于 2010-08-17T02:43:48.127 に答える
2

ハドソンに親切にして、それ自体をシャットダウンさせてはどうでしょうか。私はハドソンフォーラムで次のステートメントを見つけました:

http:// server / hudson/exitを1.161に追加しました。このURLにアクセスすると、Hudsonを実行しているVMがシャットダウンされます。

あなたはwgetでURLを呼び出すことができます。適切な時間内にシャットダウンしない場合でも、ハドソンを殺すことができます。

編集:興味深い再起動オプションを使用して、別のスレッドに遭遇しました。Winstoneサーバーのビルドのコマンドを使用します。環境変数への変更を取得するかどうかはわかりません。

于 2010-08-17T14:18:27.873 に答える
0

RPMを介してHudsonを使用している場合は、すでにinitスクリプトが付属しています。そうでない場合は、それらを調べて、スクリプトをそれらに基づいて作成できるかどうかを確認します:https ://hudson.dev.java.net/svn/hudson/trunk/hudson/main/rpm/SOURCES/ (ゲスト//ゲスト)。

于 2010-08-17T00:00:55.537 に答える