Создание служб для WebSphere Application Server в ОС Windows

О взаимосвязях служб Windows и компонент WebSphere Application Server

Рано или поздно у всех, кто работает с WebSphere Application Server в ОС Windows, возникает необходимость создания служб для компонент WAS. Это обусловлено тем, что службы Windows для WAS делают удобным управление состояниями серверов приложений, узлов и администраторов развертывания (deployment manager), а так же позволяют автоматизировать запуск этих компонент. Под удобным управлением подразумевается запуск, останов, перезапуск компонент WAS без использования внутренних bat-файлов с указанием параметров.

При развертывании профайлов “Сервер приложений” (Application server [Standalone server]) и “Управление” (Deployment manager, Job manager, Administrative agent) есть возможность создать Windows службу для единственного сервера в этих профайлах. Так же можно создать службу для администратора развертывания в профайле “Ячейка“.

Однако, при развертывании профайлов типа “Нестандартный профайл” (Custom Profile), необходимых для построения полноценной конфигурации Network Deployment (ND), невозможно создать службы для узлов. Иногда требуется создать службы для серверов приложений, относящихся к этим профайлам, но и это невозможно. Под полноценной конфигурацией ND подразумевается такая архитектура, когда в рамках ячейки с администратором развертывания существуют несколько узлов, обычно расположенных на разных машинах, в которых содержатся несколько серверов приложений, образующих горизонтальные кластеры.

Для решения вопросов, связанных с созданием, удалением и изменением служб WAS в Windows, на помощь администраторам приходит утилита WASService, работа с которой будет рассмотрена далее.

Работа с утилитой WASService

WASService.exe – это утилита командной строки, предназначенная для работы со службами WAS, входящая в состав установки продукта и расположенная в директории <WebSphere_Install_Root>\bin\. Ниже представлен ее синтаксис:

Обязательные параметры:

-profilePath server_profile_directory

Этот параметр указывает расположение профайла, т.е.  путь до директории

-serverName server_name

Этот параметр определяет имя сервера, для которого создается служба.

 Остальные параметры – опциональные, их наличие не является обязательным:

-add service_name

Этот ключ используется для создания службы или изменения параметров уже существующей службы.

-configRoot configuration_repository_directory

Этот ключ определяет расположение директории config, которая находится в корневом каталоге продукта.

-encodeParams service_name

Используя эту опцию можно зашифровать аргументы ключей -startArgs и -stopArgs, что не позволит их определить используя редактор реестра.

-logFile service_log_file

Этот ключ определяет журнал, в который будут формироваться записи о работе службы.

-logRoot server_log_directory

Этот ключ определяет директорию журналов сервера. WASService использует этот ключ для доступа к файлу server_name.pid.

-remove service_name

Эта опция позволяет удалить указанную службу.

-restart true | false

Этот параметр определяет будет ли служба перезапускаться автоматически после своего “падения”. По умолчанию значение “true“.

-start service_name [optional startServer.bat parameters]

Эта опция позволяет запустить созданную ранее службу, с указанием опциональных параметров, аналогичных startServer.bat.

-startArgs additional_start_arguments

Этот ключ определяет дополнительные параметры для запуска службы.

-startType automatic | manual | disabled

Этот параметр определяет тип запуска службы при старте системы: автоматически, вручную, отключено. По умолчанию значение “manual“.

-status service_name

Эта опция позволяет получить текущий статус указанной службы.

-stop service_name [optional stopServer.bat parameters]

Этот ключ используется для останова выбранной службы, с указанием опциональных параметров, аналогичных stopServer.bat.

-stopArgs additional_stop_arguments

Этот ключ определяет дополнительные параметры для останова службы.

-userid user_id -password password

Этот параметр определяет пользователя и пароль, из-под которого будет запускаться служба.

-wasHome app_server_root

Этот параметр определяет корневую директорию установки продукта (…\WebSphere\AppServer).

Исходя из личного опыта и отзывов коллег, стоит заметить, что иногда создаваемые вручную службы работают некорректно. Обычно, это выражается в “падении” служб при их останове и перезапуске. Например, при останове службы Standalone сервера приложений, служба “падает”, но сервер не останавливается. Иногда такая же ситуация возникает в работе служб, созданных по умолчанию в момент развертывания профайла.

Что делать, если служба “упала”, а процесс сервера продолжает “висеть”? В этом случае необходимо попытаться остановить сервер с помощью stopServer.bat или убив его процесс в системе. Для того, что бы понять какой java-процесс необходимо завершить, надо узнать PID интересующего нас сервера. Его можно найти в файле server_name.pid, который расположен в директории с журналами сервера (server_log_directory). После того, как мы узнаем PID сервера, через диспетчер задач (Task Manager) завершаем его процесс и удаляем файл server_name.pid. Как правило, запуск сервера с помощью службы проходит успешно.

Исследование вопроса “падения” служб WAS показало, что подобные ошибки во взаимодействии служб и соответствующих процессов WAS, связаны с неправильными или неустановленными параметрами, которые задаются при создании служб. Чаще всего, это параметры -stopArgs и -logFile.

Если в конфигурации WAS активирована защита, т.е. используется логин/пароль, то параметр -stopArgs становится обязательным. Его необходимо использовать в следующем формате:

-stopArgs “-username wasadmin -password mypassword”

где wasadmin и mypassword – это связка пользователь-администратор/пароль конфигурации WAS.

Так же для корректной работы службы необходимо использовать параметр -logRoot. С помощью этого параметра служба WASService обращается к файлу server_name.pid и определяет работает сервер или нет. Значение этого параметра – путь к директории журналов сервера.

При использовании необязательного параметра -logFile, определяющего журнал, в который WASService формирует записи о своей работе, необходимо указать полный путь к расположению лог файла, включая имя лог файла. Даже не смотря на наличие параметра -logRoot.

Рассмотрим примеры создания служб Windows для разных компонент WAS с помощью WASService:

В результате будут созданы 3 службы, показанные на рисунке:

wasservice-windows-services

Посмотрим свойства службы “IBM WebSphere Application Server V8.5 – WTDMGR”:

wasservice-dmgr-service

При создании службы в качестве имени мы указывали “WTDMGR”, но как видно из рисунка выше, в имя службы автоматически добавляется префикс “IBMWAS85Service – “, соответствующий версии используемого продукта. А в отображаемое имя (Display name) добавляется префикс “IBM WebSphere Application Server V8.5 – “. В описании можно увидеть имя сервера – dmgr.

Добавление/изменение параметров уже существующей службы производится новым вызовом “WASService.exe -add“, т.е. фактически служба создается заново с измененными значениями параметров, которые требуется обновить.

Для удаления службы можно воспользоваться следующей командой WASService:

WASService.exe -remove “service name”

или системной утилитой для работы со службами, SC:

sc delete “service name”

Утилита WASServiceCmd

Несомненно, утилита WASService является очень полезной. Но создание служб WAS с ее помощью требует ручного ввода множества символов. В значениях параметров легко допустить ошибку, что скажется на работоспособности. Можно потратить много времени на отладку и выявление причин ошибок в работе служб. Для упрощения процесса создания служб WAS с помощью WASService, команда DeveloperWorks в 2010 году разработала специальную интерактивную оболочку – WASServiceCmd.

Утилита WASServiceCmd представлена отдельным exe-файлом, который изначально не входил в состав WebSphere Application Server, но начиная с версии WAS V8 и выше, его включили в состав продукта под другим названием – WASServiceHelper.bat. То есть это одна и та же оболочка WASService, но под разными названиями. WASServiceHelper.bat расположен в директории <WebSphere_Install_Root>\bin\.

Так что же такое WASServiceCmd или WASServiceHelper.bat? Чем она облегчает работу?

Этот инструмент имеет дружественный пользовательский интерфейс командной строки, что позволяет гораздо быстрее создавать или редактировать существующие службы за счет сокращения числа символов, вводимых руками, практически исключая человеческий фактор. Он сам определяет расположение профайлов, выводит список серверов, для которых можно создать службы, и сам задает однозначные вопросы, ответы на которые определяют параметры для службы. Эта утилита может применяться для целого стека продуктов, имеющих в основе WAS, например Maximo или Portal.

WASServiceCmd имеет следующие режимы работы, представленные в главном меню:

  • Добавить или обновить службу WebSphere (с минимальным набором параметров)
  • Добавить или обновить службу WebSphere (с настройкой всех параметров)
  • Удалить службу WebSphere
  • Узнать состояние службы WebSphere
  • Трассировка служб WebSphere

Теперь попробуем создать службу для агента узла с помощью WASServiceCmd/WASServiceHelper:

Как видно из примера, процесс создания службы со всеми параметрами проходит очень легко и быстро! WASServiceCmd – лучшее решение для работы со службами WAS.

Если Вы используете WAS ниже версии 8, то Вы можете скачать архив с WASServiceCmd, распаковать его и поместить утилиту в директорию <WebSphere_Install_Root>\bin\ (это обязательное условие), после чего можно приступать к работе. Утилита поддерживает следующие версии WAS: 6.0, 6.1, 7.0, 8.0, 8.5.

Icon of Zip Archives WASServicecmd (29.0 KB)

Про трассировку

Трассировка, это специальный режим, в котором фиксируются команды WASService по созданию и удалению служб, а так же все действия по управлению, выполняемые с уже созданными службами для WAS. Трассировка активируется/деактивируется для всех служб WAS. После активации в директории <WebSphere_Install_Root>\bin\ будет создан файл WASServiceTrace.enabled, свидетельствующий об активации трассировки, а так же журнал трассировки WASServiceCmd.log. Что же можно увидеть в этом журнале? Например, мы запускаем службу Deployment Manager’а “IBMWAS85Service – WTDMGR”, вот что будет зафиксировано в журнале:

Логируемой информации достаточно для того, что бы понять, что конкретно с какой службой (компонентом WAS) происходит, и на каком этапе возникает ошибка.

Работа со службами в конфигурации WAS ND

Стоит отметить, что в конфигурации WAS Network Deployment, нет необходимости создавать службы для серверов приложений. Это обуславливается зависимостью состояний серверов приложений от агента узла, т.е. от настроек стратегии наблюдения (Monitoring Policy). Это относится к WAS Network Deployment V6.1 и выше.

Настройки стратегии наблюдения (Monitoring Policy) производятся в соответствующем разделе админ. консоли:

Серверы > Типы серверов > Серверы приложений WebSphere > имя_сервера > раздел “Инфраструктура сервера” > Java и управление процессами > Стратегия наблюдения.

Server-Monitoring-Policy-01

Среди параметров стратегии наблюдения (Monitoring Policy) нас интересует “Состояние перезапуска узла” (Node Restart State):

Server-Monitoring-Policy-02
Этот параметр определяет поведение сервера после перезапуска агента узла. Если сервер работал в момент выключения агента узла, то он будет продолжать работать после запуска агента узла. Если сервер был остановлен в момент выключения агента узла, то после запуска агента узла состояние сервера определяется значением этого свойства:

  • ОСТАНОВЛЕН (STOPPED) – агент узла не будет запускать сервер приложений.
  • РАБОТАЕТ (RUNNING) – агент узла будет запускать сервер.
  • ПРЕДЫДУЩЕЕ (PREVIOUS) – агент узла будет запускать сервер, только если сервер работал при выключении агента узла.

По умолчанию Node Restart State имеет значение “ОСТАНОВЛЕН” (STOPPED). Этот параметр не влияет на значение, указанное для параметра “Автоматический перезапуск”.

Таким образом, Вы можете настроить автоматический запуск серверов приложений после запуска службы агента узла внутренними средствами WebSphere. Но если Вы хотите управлять состоянием серверов приложений через службы Windows, то необходимо установить свойство Node Restart State в значение “ОСТАНОВЛЕН” (STOPPED).

После создания служб для серверов приложений , управление состоянием серверов необходимо осуществлять через службы, а не через административную консоль. Это связано с тем, что команды на запуск, останов и перезапуск, выполняемые из админ. консоли, не влекут за собой соответствующих действий над службами (В случае останова сервера из админ. консоли, служба “падает”). Например, при запуске сервера приложений из админ. консоли, соответствующая служба не стартует автоматически, но сам сервер приложений успешно запустится. Таким образом происходит несоответствие состояний служб и компонентов WAS. В то же время запуск сервера через startServer.bat инициирует запуск соответствующей службы:

! Еще одним важным замечанием является то, что в ОС Windows, в конфигурации WAS ND, действия над серверами приложений можно осуществлять только при запущенном узле, т.е. сервере агента узла (nodeagent). То есть запустить, остановить или перезапустить сервер приложений используя любые способы, будь то админ. консоль, bat-ники или службы, невозможно без работающего агента узла.

Рассмотренные выше причины послужили тому, что утилита WASServiceCmd советует не создавать службы для серверов приложений в WAS ND:

В этой статье мы подробно рассмотрели процесс создания служб Windows для компонент WebSphere Application Server, а так же утилиты, делающие этот процесс простым и быстрым.

VN:F [1.9.22_1171]
Rating: 5.0/5 (3 votes cast)
Метки: , , , ,
Опубликовано в WebSphere Application Server, Основы, Тюнинг

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: