24 нояб. 2011 г.

Шесть способов погасить JBoss

Как погасить JBoss из shell-скрипта или из build-файла Ant?

  1. Из shell - локальный экземпляр JBoss:
    #!/bin/sh
    #pgrep -fl org.jboss.Main

    pkill -f org.jboss.Main
    Принцип работы прост - найти и уничтожить :) процесс, содержащий строку запуска с именем класса JBoss.
  2. Из shell - удалённый/локальный экземпляр (при запуске надо задать имя или IP хоста, номер порта, для локального экземпляра именем хоста может быть localhost или 127.0.0.1):
    #!/bin/sh
    if test $1; then HOST=$1; else HOST=localhost; fi
    if test $2; then PORT=$2; else PORT=8080; fi
    echo "Shutting down $HOST:$PORT"
    wget -O /dev/null "http://$HOST:$PORT//jmx-console/HtmlAdaptor?action=invoke

    OpByName&name=jboss.system%3Atype%3DServer&methodName=shutdown"Здесь через wget серверу даётся точно та же команда остановки, что и вручную из jmx-консоли в браузере
  3. Из shell - удалённый/локальный экземпляр при запароленной jmx-консоли (при запуске надо задать имя/IP хоста, номер порта, в самом скрипте надо вписать действительные имя/пароль администратора jmx-консоли):
    #!/bin/sh
    if test $1; then HOST=$1; else HOST=localhost; fi
    if test $2; then PORT=$2; else PORT=8080; fi
    echo "Shutting down $HOST:$PORT"
    wget --user=admin --password=admin --output-document=stop-jboss-result.html "http://$HOST:$PORT//jmx-console/HtmlAdaptor?action=invoke
    OpByName&name=jboss.system%3Atype%3DServer&methodName=shutdown"
  4. Из build-файла Ant (обычно он называется build.xml) - локальный экземпляр JBoss (надо задать номер порта jboss.stop.port, по которому определяется состояние JBoss - запущен или остановлен, каталог установки JBoss jboss.home, каталог конфигурации экземпляра JBoss jboss.configuration.dir, имя хоста as.host, номер порта HTTP as.http.port):

      <target name="jboss_check">
        <condition property="jboss.running">
          <socket port="${jboss.stop.port}" server="${as.host}" />
          <!-- <socket port="${as.http.port}" server="${as.host}" /> -->
        </condition>
      </target>
       
      <target name="jboss_stop" description="Stop JBoss" depends="jboss_check" if="jboss.running">

        <echo>Stopping local JBoss (${jboss.home}/bin/). Please wait...</echo>
        <java jar="${jboss.home}/bin/shutdown.jar" dir="${jboss.configuration.dir}" fork="true" classpath="${jboss.home}/bin/shutdown.jar">
          <arg line="-s ${as.host}" />
        </java>
        <waitfor maxwait="120" maxwaitunit="second">
          <not>
            <socket server="${as.host}" port="${as.http.port}" />
          </not>
        </waitfor>
      </target>

    Пример файла с настройками (типа jboss.properties):

    jboss.home=/opt/jboss/jboss-4.2.3.GA
    jboss.configuration=default
    jboss.configuration.dir=${jboss.home}/server/${jboss.configuration}/conf
    jboss.stop.port=1099

    #as.instance.dir=j:/server/instance23
    as.instance.dir=${jboss.home}/server/${jboss.configuration}
    as.deploy.dir=${as.instance.dir}/deploy
    as.host=localhost
    as.http.port=8080
    В build-файле мы сначала определяем состояние сервера (слушает порт, т.е. живой, или не слушает, т.е. неживой или ему совсем плохо), и при живом сервере делаем то же, что делает скрипт shutdown.sh из дистрибутива JBoss, затем ждём, пока он не погасится полностью, чтобы не начать выполнение последующих задач, пока сервер ещё не погасился.
  5. Из build-файла Ant - удалённый/локальный экземпляр JBoss (настройки аналогичны предыдущему примеру, принцип работы аналогичен пункту 2):
      <target name="jboss_shutdown" description="Shutdown JBoss">
        <echo>Stopping JBoss (http://${as.host}:${as.http.port}). Please wait...</echo>
        <get src="http://${as.host}:${as.http.port}//jmx-console/HtmlAdaptor?action=invokeOpByName&amp;name=jboss.system%3Atype%3DServer&amp;methodName=shutdown"
          dest="jboss_shutdown_result.html" ignoreerrors="true" />
        <waitfor maxwait="120" maxwaitunit="second">
          <not>
            <socket server="${as.host}" port="${as.http.port}" />
          </not>
        </waitfor>
      </target>
  6. Из build-файла Ant - удалённый/локальный экземпляр JBoss при запароленной jmx-консоли (отличается от предыдущего примера только атрибутами username= и password=, в которые надо прописать имя/пароль администратора jmx-консоли):
      <target name="jboss_shutdown" description="Shutdown JBoss">
        <echo>Stopping JBoss (http://${as.host}:${as.http.port}). Please wait...</echo>
        <get src="http://${as.host}:${as.http.port}//jmx-console/HtmlAdaptor?action=invokeOpByName&amp;name=jboss.system%3Atype%3DServer&amp;methodName=shutdown"
          dest="jboss_shutdown_result.html" username="admin" password="admin" ignoreerrors="true" />
        <waitfor maxwait="120" maxwaitunit="second">
          <not>
            <socket server="${as.host}" port="${as.http.port}" />
          </not>
        </waitfor>
      </target>

2 комментария:

  1. 7. Нажать на самую большую кнопку на системнике.

    8. Выдернуть из розетки штекер провод которого подключен к системному блоку.

    ОтветитьУдалить
  2. Восьмой не пойдёт - у нормального компа в розетке торчит провод от бесперебойника. И вообще, как написать скрипт, выдёргивающий вилку из розетки?

    ОтветитьУдалить