[2003] Remote service: check & start

Pagina: 1
Acties:

  • StarWing
  • Registratie: Januari 2003
  • Laatst online: 07:24
ik ben bezig met een scriptje in elkaar te steken dat kijkt of een service aktief is op server A, indien dit niet zo is, moet deze gestart worden op server B.

Echter, mijn kennis van scripten/batch is een beetje beperkt.
Het volgende heb ik al gevonden, maar helaas kan ik beiden niet combineren, anders was het gelukt.

Op een standalone machine:
code:
1
2
net start | find /i "SERVICE">NUL
if errorlevel==1 net start SERVICE

Nu kan je met de gewone "net start" geen query doen op een remote machine :'(

Daarvoor heb ik "sc.exe" gevonden.
code:
1
2
3
4
5
6
7
8
9
10
d:\>sc \\servername query spooler

SERVICE_NAME: spooler
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

Hier werkt de errorlevel niet op :'(

Ik weet zeker dat er een manier is om met batch te kijken wat er achter de "state" lijn staat en vervolgens een commando te geven afhankelijk van het resultaat.

Zoiets dus: (in mijn geval)
code:
1
2
3
4
5
6
sc \\server1 query "service"
if "lijn achter state"=3 goto xx1
if "lijn achter state"=4 goto xx2

:xx1
sc \\server2 start "service"

Helaas weet ik niet hoe ik dat laatste voor elkaar moet krijgen.

Heb al ettelijke uurtjes zitten zoeken, maar niets gevonden. Ook geen script dat er een beetje op trekt en dat ik kan aanpassen.
Wie kan mij helpen ??

Page intentionally left blank.


  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

code:
1
for /f "tokens=1,3" %A in ('sc query netlogon') do if %A==STATE echo %B

Deze regel query'ed de netlogon service en echo het statusnummer. Voor gebruik in een batch-file moet je even de procentjes verdubbelen %A wordt %%A etc.

Korte uitleg, ik voer het commando sc query uit, en de volgende regel is de regel die belangrijk is:
STATE : 1 STOPPED
Ik controleer dus of het eerste token gelijk is aan "State". Zo ja dan wil ik het derde token weten, daar gaat het uiteindelijk om.
code:
1
2
3
State = token 1 en wordt %A
: = token 2
1 = token 3 en wordt %B

State 0 = stopped. In jouw geval wil je het Echo gedeelte vervangen door sc start "service".
dus iets als:

If %A==STATE& %B=0 "sc query start..."

[ Voor 55% gewijzigd door Question Mark op 04-08-2006 15:13 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • StarWing
  • Registratie: Januari 2003
  • Laatst online: 07:24
Bedankt voor je antwoord,

ik denk dat er nog een kleine fout in de regel zit:
Ik krijg steeds de error "& niet verwacht op dit moment."

de code zit er momenteel als volgt uit (staat in een batchfile)
code:
1
2
@echo off
for /f "tokens=1,3" %%A in ('sc query netlogon') do If %%A==STATE& %%B=0 "echo test"


Alvast Bedankt!

Page intentionally left blank.


Verwijderd

spatie werkt echt...

maar aangezien je verschillende acties wilt doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
for /f "tokens=1,3" %%A in ('sc query netlogon') do if %%A==STATE call :nextaction %%B
goto :eof

:nextaction
if "%1"=="" goto error
if %1==3 sc start ....
if %1==4 sc stop ....
goto :eof

:error
Echo no state value
goto :eof

[ Voor 96% gewijzigd door Verwijderd op 04-08-2006 16:42 ]


  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Met het voorbeeld van IIS5 ben je inderdaad wat flexibeler, maar wat ik me afvraag: waarom gebruik je niet de recovery option van de service zelf? (properties van de service, tabblad recovery). Kies dan bij 'action' voor de optie 'run a program'. Kies als programma een batch waarin staat:
code:
1
sc server B start....

In dit geval hoef je het hele testen van het nog draaien van de service op server A niet uit te voeren.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • StarWing
  • Registratie: Januari 2003
  • Laatst online: 07:24
spatie werkt echt...
Snap niet wat je hiermee bedoeld, zit er een typfout in dan ?

Ik ga iig je stukje code proberen.
Met het voorbeeld van IIS5 ben je inderdaad wat flexibeler, maar wat ik me afvraag: waarom gebruik je niet de recovery option van de service zelf? (properties van de service, tabblad recovery).
Weet ik, maar het is meer de bedoeling om de server zelf te checken dan de service.
adhv een ping kan je dit doen, maar als het OS crashed gaat een ping nog response geven, maar een service niet (althans hoop ik toch)

Ik ga aan de slag met bovenstaande stukjes code, maar Question Mark, zou je mij kunnen zeggen waar er al dan niet een fout zit in jouw stukje code ? Ik kan mijn probleem oplossen met het stukje code van IIS5, maar ik zou gewoon graag weten waarom dat van jou niet werkt of wat ik misdoe (weeral iets bijgeleerd dan ;) )

_/-\o_

Page intentionally left blank.


  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Net even getest, mijn voorbeeld doet het inderdaad niet (op zich raar want "echo test& echo test" werkt wel). In plaats van de "&" een extra IF statement werkt wel:

code:
1
IF %%A==STATE IF %%B==4 ECHO RUNNING!

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • StarWing
  • Registratie: Januari 2003
  • Laatst online: 07:24
owkey, het werkt ;)

Bedankt Question Mark & IIS5 _/-\o_

Page intentionally left blank.

Pagina: 1