Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Processüberwachung

Frage Microsoft Windows Tools

Mitglied: chappy

chappy (Level 1) - Jetzt verbinden

02.09.2010, aktualisiert 18.10.2012, 3424 Aufrufe, 23 Kommentare

Hallo,

ich möchte gern Prozesse überwachen. Sobald die sich selbst beenden (Absturzt), muss eine message angezeigt werden! Leider handelt es sich bei dem Prozess um einen Unterprozess eines Tasks. Wenn man sich die Abbildung anschaut, müssen die javaw.exe processe überwacht werden.

970c8c35fd7078862120162dfe5810ee - Klicke auf das Bild, um es zu vergrößern

Ich hoffe ihr könnt mir da weiterhelfen.

Gruss

chappy
Mitglied: chappy
07.09.2010 um 11:53 Uhr
Keiner der weiss wie?

ich hatte es bereits ausprobiert mit der Tasklist find.... aber das problem ist, dass alle 4 Prozesse gleich heissen, aber von unterschiedlichen Usern gestartet. Damit könnte man die unterscheiden. Aber leider weiss ich nicht wie man sowas in eine bat einbringen kann.

Danke
Bitte warten ..
Mitglied: bastla
07.09.2010 um 21:53 Uhr
Hallo chappy!

Soferne ich Dich richtig verstehe, willst Du doch herausfinden, ob alle 4 Prozesse noch laufen - insofern würde ja ein Abzählen genügen:
01.
@echo off & setlocal 
02.
for /f %%i in ('tasklist|find /c "jawaw.exe"') do set /a Anz=%%i 
03.
If %Anz% neq 4 echo Mindestens ein Prozess laeuft nicht!
Grüße
bastla
Bitte warten ..
Mitglied: chappy
08.09.2010 um 12:07 Uhr
Hallo bastla,

nicht so ganz. Ich wollte die processe überwachen und wenn einer nicht läuft, dann wird eine Mail versendet und der dazugehörige Dienst neugestartet.

Danke
chappy
Bitte warten ..
Mitglied: chappy
10.09.2010 um 07:17 Uhr
Hallo zusammen,

ist hier niemand der weiss, wie man sowas machen könnte?

gruss
chappy
Bitte warten ..
Mitglied: chappy
21.09.2010 um 09:51 Uhr
Hallo,

kann ich aus der Tasklist auch den Benutzer ermitteln? Wie kann ich dass machen?

danke gruss
chappy
Bitte warten ..
Mitglied: chappy
21.09.2010 um 10:58 Uhr
Hallo,

bin schon einmal ein Schritt weiter. mittels:

01.
tasklist /fi "username eq GEWAG\xrettubespg"
kann ich schonmal die Prozesse des Users ermitteln. Also ich habe 6 Usernamen, jeder dieser 6 muss jeweils 2 Prozesse aufgelistet haben. ist die Anzahl <2, dann muss der dazugehörige Dienst neugestart werde. Das geht sollte mit net stop "Dienst" und net start "Dienst" gehen. So nun fehlt die Formulierung in eine batch, vielleicht kann ja jetzt jemand dabei helfen.

Danke und Gruss
chappy
Bitte warten ..
Mitglied: chappy
21.09.2010 um 12:44 Uhr
Bitte warten ..
Mitglied: chappy
21.09.2010 um 12:45 Uhr
Hallo,

hier mal meinen Ansatz:

01.
@echo on & setlocal  
02.
 
03.
set Anz=2 
04.
 
05.
for /f %%i in ('tasklist /fi "username eq Domaine\benutzer"') do  @set /a sum += 1  
06.
echo %sum% -mal 
07.
If %sum% lss %Anz% ( 
08.
echo Mindestens ein Prozess laeuft nicht! 
09.
net stop "Dienst" 
10.
net start "Dienst"  
11.
) else ( 
12.
echo Alles ok!  
13.
)
was ich nicht verstehje, warum zählt er 4? ich habe doch nur 2 Einträge in der taskliste. Wenn ich den Befehl

01.
'tasklist /fi "username eq Domaine\benutzer"'
im cmd eingebe, dann bekomme ich 2 Einträge, aber gezählt werden 4 Durchläufe der for-Schleife. Kann mir jemand sagen warum? Desweiteren wollte ich die einzelnen Prozesse mit den dazugehörigen benutzer in eine TXT-Datei ablegen, bisher sind es 8 Prozesse, so dass es 8 Zeilen in der TXT sein werden die wie folgt aussehen könnten:

1. Pfad_der_Anwendung.exe benutzername
2. Pfad_der_Anwendung.exe benutzername
3. Pfad_der_Anwendung.exe benutzername
4.

Danke vorab, in der Hoffnun, dass sich mal einer zu diesem Thema meldet.

Gruss
chappy
Bitte warten ..
Mitglied: bastla
21.09.2010 um 16:18 Uhr
Hallo chappy!

Zumindest hinsichtlich
gezählt werden 4 Durchläufe der for-Schleife
hätte ich einen Hinweis: Gezählt werden ja alle Zeilen der "tasklist"-Ausgabe - wenn Du diese auf die tatsächlich Interessanten (mit "javaw.exe") beschränken willst, dann:
for /f %%i in ('tasklist /fi "username eq Domaine\benutzer"^|findstr "javaw\.exe"') do  set /a sum +=1
Deine zweite Frage ist mir nicht wirklich klar ("tasklist" liefert keinen Pfad) ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
22.09.2010 um 10:43 Uhr
Hallo Bastla,

erst einmal danke, der Hinweis war richtig. es wurden tatsächlich die Zeilen gezählt. Jetzt klappt es auch.

Zu meiner 2ten Frage:

Ziel ist es:
ich prüfe, ob ein Prozess läuft, wenn das nicht der Fall ist, muss der dazugehörige Dienst neugestartet werden.
Da es sich hier um mindestens 8 Prozesse / Dienste handelt, die unterschiedlich heissen, stellt sich für mich die Frage, wie ich diese in eine TXT-Datei hinterlegen könnte.

Idee:
Die Txt-Datei beinhaltet den Benutzernamen des Prozesses zum identifizieren, ob dieser läuft und zum anderen den Dienstnamen, der ggf. neugestartet werden muss. Also der Inhalt könnte wie folgt lauten:

benutzername1 Dienstname1
benutzername2
Dienstname2
benutzername3 // Dienstname3
etc...

nun soll jeder einzelne Dienst geprüft werden. Ich poste gleich mal mein bisheriges Ergebnis:

01.
@echo off & setlocal  
02.
 
03.
set "Dienste=D:\jobs\CheckProcess\Dienste.txt" 
04.
set sum=0 
05.
 
06.
for /f "usebackq tokens=1-2 delims=%Delim%" %%d in ("%Dienste%") do (  
07.
	for /f %%i in ('tasklist /fi "username eq %%Benutzername"^|findstr "javaw\.exe"') do  @set /a sum += 1  
08.
	If %sum%==0 ( 
09.
	echo Der Prozess ist nicht vorhanden! %sum% 
10.
	date /t >> D:\Programme\test.txt 
11.
	time /t >> D:\Programme\test.txt 
12.
	net stop "%%Dienstname" >> D:\Programme\test.txt 
13.
	net start "%%Dienstname" >> D:\Programme\test.txt 
14.
	) else ( 
15.
	echo Alles ok %sum%-mal!  
16.
17.
)
das Problem ist, wie kann ich den benutzernamen auslesen und den an die richtige Stelle einsetzen und wie den Dienstnamen richtig auslesen und an die richtige Stelle einsetzen?

Danke dir
chappy
Bitte warten ..
Mitglied: bastla
22.09.2010 um 16:43 Uhr
Hallo chappy!

Was Du dargestellt hast, nämlich die Kontrolle ob überhaupt ein "javaw"-Task für den angegebenen Benutzer läuft (und nicht die Kontrolle, ob es denn 2 wären), ließe sich einfacher realisieren:
01.
@echo off & setlocal  
02.
 
03.
set "Dienste=D:\RETTube\jobs\CheckProcess\Dienste.txt" 
04.
 
05.
for /f "usebackq tokens=1* delims=%Delim%" %%d in ("%Dienste%") do (  
06.
    tasklist /fi "username eq "%%d"^|findstr "javaw\.exe">nul && ( 
07.
        echo Alles ok!  
08.
    )	|| ( 
09.
        echo Der Prozess ist nicht vorhanden! 
10.
        date /t >> D:\Programme\test.txt 
11.
        time /t >> D:\Programme\test.txt 
12.
        net stop "%%e" >> D:\Programme\test.txt 
13.
        net start "%%e" >> D:\Programme\test.txt 
14.
15.
)
Soferne das Trennzeichen zwischen Benutzer- und Dienstnamen in der Textdatei ein TAB oder ein Leerzeichen ist, kannst Du "delims=%Delim%" weglassen, und wenn nicht, dann müsste dieses Trennzeichen der Variablen auch zugewiesen worden sein, also etwa
set "Delim=;"
Falls durch Leerzeichen getrennt wird, sorgt die Schreibweise "tokens=1*" dafür, dass nur das erste Leerzeichen (zwischen Benutzername und Dienstname) als Trennzeichen gilt und ev im Dienstnamen enthaltene weitere Leerzeichen letzteren nicht "auseinanderreißen" ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
23.09.2010 um 07:45 Uhr
Hallo bastla,

erst einmal Danke für deine Mühe. Ich habe es noch nicht getestet, habe erst einmal sehen wollen, wo die unterschiede, zwischen den codes liegen. Eine Frage von mir ist, wann schreibt man dieses

01.
>nul 
und was bewirkt das?
desweiteren, hatte ich auch versucht das

01.
&& 
zu verwenden, aber es kam immer die Meldung, dass es ungültig an dieser Stelle ist. Handelt es sich hier um kein logisches UND? Wollte z.B. schreiben, wenn if-Bedingung1 && If-Bedingung2 erfüllt, dann schreibe ok vielleicht hatte ich ein do dahinter: do echo OK

Danke erst einmal.

chappy
Bitte warten ..
Mitglied: bastla
23.09.2010, aktualisiert 18.10.2012
Hallo chappy!

Mit ">" wird eine "Ausgabeumleitung" vorgenommen - so kann die Ausgabe eines "echo" oder anderen Befehles in eine Datei, oder, wie in diesem Fall, zum "nul"-Device = ins Nichts vorgenommen werden - es wird damit die "normale" Ausgabe unterdrückt. Um auch Fehlermeldungen umzuleiten, wäre zusätzlich "2>&1" zu verwenden ...
Das "&&" entspricht einer Abfrage des Errorlevels auf 0 und kann daher für eine bedingte Befehlsausführung verwendet werden: Nur, wenn der vorhergehende Befehl ohne Fehler beendet wurde, wird der nach "&&" folgende Befehl ausgeführt. Das Gegenstück "||" habe ich oben auch verwendet ...
Für die UND-Verknüpfung genügt einfach
if Bedingung 1 if Bedingung 2 Aktion
- hat aber eigentlich Biber hier schon mal gezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
04.10.2010 um 14:26 Uhr
Hallo bastla,

danke für deine Antworten. Ich habe die Txt-Datei erweitert und somit nun 3 Values in einer Reihe stehen, welche durch ein ; getrennt sind.
Leider kann ich aber den 3ten Wert nicht auslesen. Das 3te ist ein Verzeichnis, worin geprüft werden muss, ob dort noch eine Datei liegt.

01.
for /f "usebackq tokens=1* delims=;" %%d in ("%Dienste%") do (   
02.
  echo d=%%d 
03.
  echo e=%%e 
04.
  echo f=%%f 
05.
  tasklist /fi "username eq %%d "|findstr "javaw\.exe">nul && (  
06.
        echo Alles ok bei %%e %%d!  
07.
    )	|| (  
08.
        echo Der Prozess %%e %%d fehlt! >> "%Log%"  
09.
        date /t >> "%Log%"  
10.
        time /t >> "%Log%"  
11.
        NET STOP %%e >> "%Log%"  
12.
        NET START %%e >> "%Log%"  
13.
        cscript //nologo "%Msg%" "%%q\%%i" ...............(wenn *.csv im Ordner %%f liegt) 
14.
   )  
15.
)
leider wusste ich das nicht zu formulieren. Wollte schreiben:

01.
if exist %%i in ("%%f/*.csv") do cscript //nologo "%Msg%" "%%q\%%i"

oder muss der Teil nach dem do in die zweite Rheie und in Klammer? Aber ich bekomme die Fehlermeldung, das %%f unbekannt ist, wie mache ich das?

Danke und Gruss
chappy
Bitte warten ..
Mitglied: bastla
04.10.2010 um 14:47 Uhr
Hallo chappy!

Ein "%%f" kann es nicht geben, wenn mit "tokens=1*" festgelegt wird, dass alles nach dem ersten Trennzeichen (unabhängig von ev weiteren vorhanden Trennzeichen) als Einheit zu interpretieren ist - daher sollte es mit "tokens=1-3" oder, falls der angesprochene Verzeichnisname auch ";" enthielte, mit "tokens=1,2*", funktionieren ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
04.10.2010 um 15:32 Uhr
Hallo Bastla,

herzlichen Dank, dass hat mir weitergeholfen. Es gibt noch ein Problem. Zunächst der Code

01.
for /f "usebackq tokens=1,2* delims=%Delim%" %%d in ("%Dienste%") do (   
02.
  echo d= %%d 
03.
  echo e= %%e 
04.
  echo f= %%f 
05.
  tasklist /fi "username eq %%d "|findstr "javaw\.exe">nul && (  
06.
        echo Alles ok bei %%e %%d!  
07.
    )	|| (  
08.
        echo Der Prozess %%e fehlt! >> "%Log%"  
09.
        date /t >> "%Log%"  
10.
        time /t >> "%Log%"  
11.
        NET STOP %%e >> "%Log%"  
12.
        NET START %%e >> "%Log%"  
13.
		if exist %%i in "%%f/*.csv" ( 
14.
		cscript //nologo "%Msg%" "%%f\%%i" 
15.
		echo %%i 
16.
17.
   )  
18.
)
Leider wird &&i nicht gefüllt, warum nicht und wie mache ich das?? ich bekomme in der email dann auch nur %%i als String angezeigt. Könntest du mir bitte sagen, wo ich den Fehler habe?

Danke

Chappy
Bitte warten ..
Mitglied: chappy
05.10.2010 um 08:54 Uhr
Hallo bastla,

könntest du mir vielleicht noch ne ANtwort auf meine letzte Frage geben? Wäre Super

Gruss
chappy
Bitte warten ..
Mitglied: bastla
05.10.2010 um 09:23 Uhr
Hallo chappy!

Wie sollte %%i zu einem Wert kommen? Die in Deinem Schnipsel verwendete Schleife liefert nur %%d, %%e und %%f ...

Und: Wie ist die Zeile 13 überhaupt gemeint?

Grüße
bastla
Bitte warten ..
Mitglied: chappy
05.10.2010 um 09:37 Uhr
Hallo Bastla,

das ist mein bisheriger code. Momentan bekomme ich die Fehlermeldung:

C:\Dokumente und Einstellungen>set "Delim=;"
")" ist syntaktisch an dieser Stelle nicht verarbeitbar.

01.
@echo on & setlocal   
02.
  
03.
set "Dienste=C:\Dienste1.txt"  
04.
set "Log=C:\Errorlog.txt " 
05.
set "Msg=C:\CheckProcessMailService.vbs"  
06.
set "Delim=;" 
07.
 
08.
 
09.
for /f "usebackq tokens=1,2* delims=%Delim%" %%d in ("%Dienste%") do (   
10.
  echo d= %%d 
11.
  echo e= %%e 
12.
  echo f= %%f 
13.
  :loop 
14.
  tasklist /fi "username eq %%d "|findstr "javaw\.exe">nul && (  
15.
        echo Alles ok bei %%e !  
16.
    )	|| (  
17.
        echo Der Prozess %%e fehlt! >> "%Log%"  
18.
        
19.
		if exist "%%i" in "%%f/*.csv" ( 
20.
		cscript //nologo "%Msg%" "%%f\%%i" 
21.
22.
		 
23.
		date /t >> "%Log%"  
24.
        time /t >> "%Log%"  
25.
		NET STOP %%e >> "%Log%"  
26.
        NET START %%e >> "%Log%"  
27.
		::goto loop	 
28.
		)  
29.
)
%%i soll die Datei sein, welche im Ordner %%f gefunden wird. So zumindest habe ich es in meinen anderen Beispielen. Was stimmt damit nicht?

Dank di für deine Mühe
chappy
Bitte warten ..
Mitglied: bastla
05.10.2010 um 09:40 Uhr
Hallo chappy!
%%i soll die Datei sein, welche im Ordner %%f gefunden wird.
In diesem Fall müsste das so aussehen:
for %%i in ("%%f\*.csv") do cscript //nologo "%Msg%" "%%f\%%~nxi"
Grüße
bastla
Bitte warten ..
Mitglied: chappy
05.10.2010 um 12:17 Uhr
Hallo Bastla,

herzlichen Dank für deine Unterstützung. könntest du mir vielleicht erklären, wo mein Gedankenfehler liegt? warum schreibst du %%~nxi ???und nicht %%i??

Gruss
chappy
Bitte warten ..
Mitglied: bastla
05.10.2010 um 14:39 Uhr
Hallo chappy!

Du hattest zwei Befehle ("for" und "if exist") vermischt - das konnte so nicht klappen. Mit "if exist" lässt sich zwar die Existenz (auch unter Verwendung von Wildcards) von Dateien und Ordnern prüfen, wenn Du aber die einzelnen Namen / Pfade benötigst, ist die Schleife erforderlich ...
Bei einer "gewöhnlichen" "for"-Schleife erhältst Du in der Schleifenvariablen im Prinzip ein "Objekt" (bei "for /f" ist es nur ein String), wodurch "%%i" dann den gesamten Pfad der jeweiligen Datei enthält. Wenn Du nun nur den Dateinamen benötigst (der Ordner ist ja schon in "%%f" enthalten), pickst Du Dir eben die passenden Bestandteile "name" und "extension") heraus (siehe dazu ziemlich am Ende von "for /?").

Alternativ hättest Du natürlich auch nur "%%i" (ohne "%%f\" vorweg) verwenden können (aber dann hättest Du ja mit "%%~nxi" keine Bekanntschaft gemacht ) ...

Grüße
bastla
Bitte warten ..
Mitglied: chappy
07.10.2010 um 15:38 Uhr
Hallo bastla,

herzlichen Dank für deine Antwort und deine Hilfe. Dann haben wir das Thema nun auch erledigt.

Supi!
grusss
chappy
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...