Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Dienste (aus einer Liste) per Batch starten, wenn Sie diese nicht gestartet sind

Mitglied: kugelschreiber

kugelschreiber (Level 1) - Jetzt verbinden

14.11.2011 um 11:41 Uhr, 7831 Aufrufe, 14 Kommentare

Hallo Ihr Lieben,

ich habe folgendes Problem. Wir haben ca 7 Server auf denen wir Dienste überwachen wollen.
Nun habe ich auf einem der Server (Testserver) angefangen, einen Dienst per "Batchfile" und "Scheduled Task" zu überwachen und diesen, wenn er nicht gestartet ist automatisch neuzustarten und eine Email an eine bestimmter Verteilergruppe via BLAT.EXE zu schicken.
Mein momentanes Script "script1.cmd" sieht so aus:

01.
@ECHO off
02.
SET scriptPath="D:\BATCH\ServiceRunning"
03.

04.
SET server=mail.server.de
05.
SET empfaenger=admin@server.de
06.
SET sender=%computername%@server.de
07.

08.
SET serviceName="serviceName"
09.

10.
REM --- in den momentan laufenden Diensten nach dem o.g. Dienst suchen-
11.
REM --- ist er enthalten, dann ist gut, ansonsten Dienst starten und Email versenden
12.
sc query %serviceName% | findstr RUNNING
13.
IF NOT ERRORLEVEL 1 GOTO ISRUNNING
14.
GOTO ISNOTRUNNING
15.

16.
:ISNOTRUNNING
17.
REM --- Dienst neu starten und Datum + Uhrzeit festhalten ---
18.
net start %serviceName%
19.
REM --- Ausfall in TXT Datei protokollieren
20.
ECHO %date% %time% >> ausfall.txt
21.
REM --- Emailbody für Blat definieren
22.
SET body="service_doesnt_run.txt"
23.
REM --- subject für BLAT definieren
24.
SET subject="The service %serviceName% was not running but has been restartet"
25.
REM --- Priorität der Email festlegen
26.
SET priority=1
27.
REM --- Schließlich einen CALL auf die EMAIL.CMD machen, die dann die Email verschickt
28.
CALL %scriptPath%\email.cmd %body% %priority%
29.
GOTO END
30.

31.
:ISRUNNING
32.
REM --- SET subject="The service %serviceName% is running"
33.
REM --- SET body="service_is_running.txt"
34.
REM --- SET priority=0
35.
REM --- CALL %scriptPath%\email.cmd %body% %priority%
36.
GOTO END
37.

38.
:END

Nun ist es aber so, dass das bei einem Dienst gut funktioniert, jedoch haben wir auf einen anderen Server 6 Dienste die überwacht werden sollen. Dabei denke ich an eine Textdatei, die die zu überprüfenden Dienste (einer pro Zeile) beinhaltet.
Dieses Textfile wird dann per for schleife durchlaufen und für jeden der Dienste dann geprüft, ob er läuft. Ich dachte da an folgendes

für(alle dienste in der datei dienste.txt){
rufe das Script script.cmd auf mit der übergabe des Dienstnamens
}


Geht das irgendwie?

Vielen Dank für Eure Hilfe
Mitglied: ITSchlumpf
14.11.2011 um 14:28 Uhr
Hi kugelschreiber,

also Dienste aus einer .txt datei auslesen könntest du so machen.

01.
Set liste= dienste.txt
02.

03.
for /f %%a in (%liste%) do call :main %%a
04.

05.
Set dienste = %1
06.

07.
net start %dienste%
Nicht getestet.

Kurz zur erklärung.
Kopiere das was in dienste.txt steht, in die Variable "liste" und gehe diese dann Zeile für Zeile durch und übergebe jede Zeile in die Variable "dienste".
Hattest du an sowas gedacht?

Gruß
Schlumpf
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 14:54 Uhr
Hi Schlumpf

ja an sowas habe ich in etwa gedacht, nur verstehe ich nicht den

01.
do call :main %%a

Was ist main?
01.
Set dienste = %1

Was wird hier erreicht?
01.
net start %dienste2%
//Warum hier den Dienst starten? Das mache ich doch schon in der script1.cmd. Die script1.cmd würde ich gern also per call aufrufen für jedes %%a. So al a

01.
for /f %%a in (%liste%) do call script1.cmd %%a
Würde das gehen?

Danke für Deine Hilfe

Gruß Kuli
Bitte warten ..
Mitglied: ITSchlumpf
14.11.2011 um 15:03 Uhr
Hi,

sry hatte vergessen :main mit reinzuschreiben.

01.
for /f %%a in (%liste%) do call :main %%a
02.

03.
goto :eof
04.

05.
:Main
06.
Set dienste = %1
07.

08.
net start %dienste%
Mit Set dienste=%1 übergebe ich den ersten paramater der for-Schleife in die Variable "dienste". Also in deinem fall werden dann eben nacheinander die Dienste in die variable "dienste" geschrieben.

Ja das würde so gehen wenn ich mich nicht irre.

Gruß
ITSchlumpf
Bitte warten ..
Mitglied: pieh-ejdsch
14.11.2011 um 15:31 Uhr
moin,

wenn der Dienstname mit Leerzeichen in Anführungszeichen innerhalb der Text steht; genügt der Einzeiler.

@IT-Schlumpf
in Zeile 02. sollte ein goto :eof hinein
Deine erstellte Variable Löst Du nicht mit %dienste2% auf - sondern mit
%dienste %
alles was vor dem = steht wird als Variablenname festgelegt auch Leerzeichen, ausser ...
siehe Wie Arbeite ich mit Batch UmgebungsVariablen? Erstellung Umgang Erweiterungen Veränderungen

net start %1
oder
sc start %1
würde in der Sub auch genügen.

Gruß Phil
Bitte warten ..
Mitglied: ITSchlumpf
14.11.2011 um 15:40 Uhr
AAAhhh xD Jetzt hab ich 5 mal deinen Text gelesen und erst beim 6.mal geschnallt was du von mir willst pieh-ejdsch.
Ja fehler meinerseits sry da hatte ich aber nen anderen ansatz und verpennt die 2 weg zu löschen.
Änder ich grad mal ab.
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 15:43 Uhr
Zitat von ITSchlumpf:
Hi,

sry hatte vergessen :main mit reinzuschreiben.

01.
> for /f %%a in (%liste%) do call :main %%a
02.
> 
03.
> :Main
04.
> Set dienste = %1
05.
> 
06.
> net start %dienste2%
07.
> 


In diesem Fall würde die for schleife aber alle Dienste in der datei starten.
Ziel ist es aber vorher wie in meiner ersten Batch script1.cmd erst zu prüfen, ob der Dienst schon läuft. Daher würde ich gern mit der for schleife die Dienste aus der Textdatei herrauslesen und pro Dienst dann die script1.cmd aufrufen, wobei ich den Dienstnamen dabei übergebe. Ich denke wir sind nah dran nur fehölt mir der richtige Aufruf des Scripts mit der richtigen Parameterübergabe.

Gruß Kuli
Bitte warten ..
Mitglied: ITSchlumpf
14.11.2011 um 15:49 Uhr
01.
for /f %%a in (%liste%) do call script1.cmd %%a
02.
goto :eof
und dann eben dein Script1.cmd durchlaufen lassen mit jedem Dienst der in der Schleife ausgelesen wird.

Gruß

[Edit] Weiß net genau ob der Script1.cmd aufruf so ganz stimmt. Vll mal kurz googeln. [/Edit]
Bitte warten ..
Mitglied: bastla
14.11.2011 um 15:51 Uhr
Hallo kugelschreiber!

Du warst doch eigentlich oben selbst schon so weit :
for /f %%a in (%liste%) do call script1.cmd "%%a"
In Deinem "script1.cmd" müsstest Du natürlich die übergebene Variable auch noch übernehmen - mit
SET serviceName=%1
als Zeile 8 ...

Grüße
bastla
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 16:02 Uhr
Ohhh das klingt gut. Das probiere ich gleich mal...
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 16:34 Uhr
HHMMM Irgendie klappt es jetzt noch nicht.
Wollte es mal testen mit einem ähnlichen Script.

1.Datei ist eine Datei namens "liste.txt". Dort stehen drin
test1
test2
test3

2. Datei ist script1.cmd
01.
@ECHO off
02.
SET liste ="liste.txt"
03.
for /f %%a in (%liste%) do call script2.cmd "%%a"
3.Datei. Das ist die die in der 2. Datei per CALL aufgerufen wird:

01.
@ECHO off
02.
echo %1 >> test.txt
Jetzt steht aber in der Ausgabedatei "test.txt" folgendes drin:

"liste.txt"

Dort erwarte ich aber doch die drei Werte aus der liste.txt

Oder?
Bitte warten ..
Mitglied: ITSchlumpf
14.11.2011 um 16:44 Uhr
Habs grad mal schnell nachgebaut. und es ging erst auch nicht. Wenn du es allerdings so schreibst müsste es gehen.
script1
01.
SET "liste=liste.txt"
02.
for /f %%a in (%liste%) do call script2.cmd %%a
Script2
01.
echo %1 >> test.txt
Der Fehler liegt wohl in der Filedeklaration. Der versteht das mit den Anführungszeichen nicht richtig. Wenn dann das ganze reinmachen >> SET "liste=liste.txt" dann sollte es gehen ;)

Gruß
schlumpf
Bitte warten ..
Mitglied: bastla
14.11.2011 um 16:47 Uhr
Hallo kugelschreiber!

Wenn Du den Dateinamen unter Anführungszeichen setzt (was grundsätzlich keine schlechte Idee ist), musst Du
for /f "usebackq" %%a in (%liste%) do call script2.cmd "%%a"
verwenden, da ein Wert in Klammer, der unter Anführungszeichen steht, ansonsten einfach als zu zerlegender Text interpretiert wird ...
Noch ein Hinweis am Rande: Wie PH oben schon erwähnte, sind Leerzeichen in "set"-Anweisungen mit Vorsicht zu genießen (bzw sehr oft kontraproduktiv) - daher:
SET liste="liste.txt"
wobei ich auch die Anführungszeichen zumeist nicht in die Variable mit einbeziehe, sondern später bei Bedarf setze ... [Edit] Wie das dann aussähe, wurde Dir ohnehin soeben vorgeschlumpf t... [Edit]

Grüße
bastla
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 16:47 Uhr
Cool!

Danke das hat zumindest gegeht.
Nun bleibt nur noch abzuwarten, ob die Ausgabe, die ja als:

"test1"
"test2"
"test3"

und später meine Dienstnamen sind auch mit dem Anführungszeichen zurecht kommen.
Melde mich gleich nochmal....
Bitte warten ..
Mitglied: kugelschreiber
14.11.2011 um 18:20 Uhr
SUBBA!

Nu hammers!

Anbei noch mal die kompletten Dateien:

Eine Datei "liste.txt" mit den Servicenamen, wie sie als Servicename in den Eigenschaften eines Service eingetragen ist. Das ist wichtig da der Dienstname in der MMC "services" nicht immer (oder so gut wie nie) gleich dem des eigentlichen aufzurufenen Dienstnamens ist.


Script 1: (check_services.cmd) Das ist die cmd Datei, die später per "Scheduled Task" aufgerufen wird.

01.
@ECHO off
02.
SET "liste=liste.txt"
03.
for /f %%a in (%liste%) do call running_services.cmd "%%a"
Script 2: (running_services.cmd) Das ist die cmd Datei die im Script 1(check_services) per CALL aufgerufen wird.
01.
@ECHO off
02.
SET scriptPath="D:\BATCH\ServiceRunning"
03.

04.
SET server=mail.server.de
05.
SET empfaenger=admin@server.de
06.
SET sender=%computername%@server.de
07.
REM %1 ist die variable %%a aus dem aufrufenden Script
08.
SET serviceName=%1
09.
REM --- alle laufende Dienste in service.txt speichern---
10.
REM net start | find %serviceName%
11.
sc query %serviceName% | findstr RUNNING
12.
IF NOT ERRORLEVEL 1 GOTO ISRUNNING
13.
GOTO ISNOTRUNNING
14.

15.
:ISNOTRUNNING
16.
REM --- Dienst neu starten und Datum + Uhrzeit festhalten ---
17.
net start %serviceName%
18.
ECHO %date% %time% >> ausfall.txt
19.
SET body="service_doesnt_run.txt"
20.
SET subject="The service %serviceName% was not running but has been restartet"
21.
SET priority=1
22.
CALL %scriptPath%\email.cmd %body% %priority%
23.
GOTO END
24.

25.
:ISRUNNING
26.
REM SET subject="The service %serviceName% is running"
27.
REM SET body="service_is_runing.txt"
28.
REM SET priority=0
29.
REM CALL %scriptPath%\email.cmd %body% %priority%
30.
GOTO END
31.

32.
:END
Danke an, alle die hier geholfen haben!

Gruß Kuli
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
TODO List in ( Batch )
gelöst Frage von clragonBatch & Shell4 Kommentare

Hallo Liebe Forum-Nutzer Ich habe heute versucht, mir eine Batch zu schreiben die Notizen anzeigt, aka eine Todo Liste ...

Batch & Shell
Batch zum Program-Start
gelöst Frage von ManneKLBatch & Shell30 Kommentare

Hallo, komme hier nicht zum erforderlichen Ergebnis,daß nach dem Eintrag in der Registry das Programm,User bezogen, gestartet wird. hier ...

Java

Java Web Start - Anwendung kann nicht gestartet werden

Frage von FischerICTJava10 Kommentare

Hallo zusammen, ich habe bei einem Kunden, der über eine Java Web Start Applikation vom Zoll Anmeldungen durchführt. Alle ...

Windows Server

Batch Script bei Start ausführen

Frage von KEFHVDIWindows Server3 Kommentare

Hallo, wie kann ich bei einem Windows Server 2012 ein Batchscript, welches mir ein Laufwerk einbinden soll, beim start ...

Neue Wissensbeiträge
Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 20 StundenInternet

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter die Seitenbetreiber ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 22 StundenGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Google Android
Facebooks unsichtbare Datensammlung
Information von AnkhMorpork vor 22 StundenGoogle Android1 Kommentar

Rund 30 Prozent aller Apps im Play-Store nehmen Kontakt zu Facebook auf, sobald man sie startet. So erfährt der ...

Exchange Server

Exchange 2010 bis 2019 Sicherheitslücke durch CU RU schließen

Information von sabines vor 1 TagExchange Server

Für die hier: und hier: besprochene Sicherheitslücke ist ein Patch für Microsoft Exchange Server 2010 - 2019 verfügbar. RU ...

Heiß diskutierte Inhalte
Windows 10
Windows Update funktioniert nicht - Keine Verbindung mit dem Updatedienst
gelöst Frage von anveWindows 1030 Kommentare

Hallo, ich kann schon länger keine Updates mehr machen. Wenn ich auf Update suchen gehe, dann schreibt er folgendes: ...

LAN, WAN, Wireless
NETBEUI unter Windows 10
Frage von certifiedit.netLAN, WAN, Wireless26 Kommentare

Guten Abend, wir stehen gerade vor dem Rästel, warum man in einer Industriemaschine (wert gut 6-stellig, paar mal vorhanden) ...

Hardware
Was passiert wenn ein Server zu heiß wird?
Frage von LohrakHardware21 Kommentare

Hallo Sollte ein Server zu heiß werden, da z.B ein Lüfter ausfällt, was würde passieren? Wie meldet sich der ...

Internet
EU-Gremien einigen sich auf die schärfste Form von Upload-Filter und Leistungsschutzrecht
Information von FrankInternet17 Kommentare

Nun ist es . Die Verlage, die in der Vergangenheit das Internet verschlafen hatten und kurz vor ihrer Auflösung ...