Как узнать состояние службы Windows

Обсуждение программ nnCron и nnCron LITE

Как узнать состояние службы Windows

Postby faceoff » Tue, 09 Dec 2008, 19:24

День добрый, джентльмены.
Собственно задача: отслеживать состояние службы (Service status) в задаче Cron . Не очень в системных ресурсах разбираюсь, поэтому не представляю даже где чего искать.
Честно прочитал хелп крона, но как то не нашел. Ткните ссылкой, где можно почитать. Спасибо.
faceoff
 
Posts: 1
Joined: Tue, 09 Dec 2008, 19:05

Re: Как узнать состояние службы Windows

Postby Yury Zhukov » Tue, 09 Dec 2008, 19:52

Как вариант: есть набор утилит от sysinternals. В этом пакете есть psservice.exe, который умеет управлять сервисами даже на удаленных машинах (естественно, при наличии прав доступа к ним). Ну и команду net пока никто не отменял....
Нас невозможно сбить с пути,
Нам пофигу куда идти.
Yury Zhukov
 
Posts: 243
Joined: Thu, 16 Jun 2005, 09:22
Location: Москва

Re: Как узнать состояние службы Windows

Postby AlikasS » Wed, 10 Dec 2008, 04:12

Code: Select all
<%
WINAPI: QueryServiceStatus         ADVAPI32.DLL
HEX
1FF CONSTANT SERVICE_ALL_ACCESS
4 CONSTANT SERVICE_QUERY_STATUS
3F CONSTANT SC_MANAGER_ALL_ACCESS
4 CONSTANT SERVICE_RUNNING
DECIMAL
: ServiceIsRunning { a u \ hsc hs -- flg }
SERVICE_QUERY_STATUS a
SC_MANAGER_ALL_ACCESS 0 0 OpenSCManagerA DUP TO hsc
OpenServiceA TO hs
SERVICE_STATUS hs QueryServiceStatus DROP
hs CloseServiceHandle DROP
hsc CloseServiceHandle DROP
SERVICE_STATUS dwCurrentState @ SERVICE_RUNNING  AND
;
%>

#( работа_со_службой_r_server
NoActive
SingleInstance
NoLog
Action:
S" r_server" ServiceIsRunning
IF
    \ если сервис активен
    THINTW: "Сервис radmin запущен" 3
ELSE
    \ если сервис не запущен
    THINTW: "Сервис radmin остановлен" 3
THEN
)#
Last edited by AlikasS on Wed, 10 Dec 2008, 10:18, edited 1 time in total.
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Как узнать состояние службы Windows

Postby Halfer » Wed, 10 Dec 2008, 09:33

под 2003 серваком и ХП есть команда SC.exe. Синтаксис использования, приблизительно, такой:
Code: Select all
START-APPW: cmd.exe /c sc.exe query "remoteaccess" | FIND "STOPPED"

После этого нужно получить код возврата:
Code: Select all
ExitCodeProc

и добавить условия.
У меня на серваке реализован механизм переключения связи между разными провайдерами. Иногда сервисы подвисают при остановке, я делаю следующее:
Code: Select all
   1 DUP

   BEGIN
      1 =
   WHILE
      1 + DUP 4 =
         IF
            \ грохаем службу маршрутизации
             KILL: "remoteaccess"
            0
         ELSE
            \ останавливаем службу маршрутизации
            SWHide
            START-APPW: net.exe stop "remoteaccess"
            1000 PAUSE

            \ проверяем выполнение остановки службы маршрутизации
            START-APPW: cmd.exe /c sc.exe query "remoteaccess" | FIND "STOPPED"
            ExitCodeProc
         THEN
   REPEAT
   DROP

Если есть вопросы, задавайте, чем могу помогу.
Halfer
 
Posts: 395
Joined: Wed, 09 May 2007, 13:23

Re: Как узнать состояние службы Windows

Postby DevilGenius » Fri, 12 Dec 2008, 13:42

У мня похожая ситуация и алгоритм работы вашего кода очень схож с моей потребностью. Не откажите в помощи.
Есть агрегат, подключенный по эзернету.
Иногда во время работы агрегат подвисает, но подвисает хитро... пинговаться продолжает, но перестаёт отвечать встроенный веб-сервер.
В решениях от sysinternals я не нашёл утилитки которая смогла бы качественно и быстро делать опрос хоста по порту... да и на форуме примеров небыло вроде пока.
Как бы реализовать данный механизм чтобы крон выполняет заданное действие только тогда когда хост есть, но веб сервера (80 порта) нет.
Выручайте гуру.
Код я могу весь и сам сделать т.к. у меня ещё очень много других условий...
Дайте хотя бы строчку типа
HOST-EXIST:...
IF
только для порта
DevilGenius
 
Posts: 13
Joined: Fri, 12 Dec 2008, 13:20


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron