dermoritz
Goto Top

Dienst starten und Stoppen, Datei löschen auf remote system - wie?

Ich hab ein simples Problem: ich muss auf einem Entfernten System (Lan, "Rechner2") einen Dienst stoppen (Tomcat7), einen Ordner und eine Datei löschen und den Dienst wieder starten. Das ganze soll per Kommandozeilenbefehl erfolgen (Er wird ausgelöst durch einen Dienst (läuft unter "System") auf einem Rechner - "Rechner1"). Was ich bisher versuch habe:
"sc" Problem: es wartet nicht bis Dienst wirklich gestoppt ist, so dass es passieren kann, das der start-Befehl ignoriert wird und am Ende der Dienst nicht läuft
"PSExec" führt batch auf remote system aus, Problem: aus unerfindlichen Grund kommt manchmal:
"
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


The system cannot find the file specified.
Connecting to Rechner2...


Starting PsExec service on Rechner2...


Connecting with PsExec service on Rechner2...


Starting d:\batch\batch.cmd on Rechner2...


d:\batch\batch.cmd exited on a-awdbstaging with error code 1.
"
aus der Konsole kann ich dieses Problem nicht reproduzieren es tritt nur manchmal auf wenn es durch den Dienst auf Rechner1 ausgelöst wird. PSExec wird mit einem Benutzeraccount (-u,-p) aus der Domäne gestartet, dieser Benutzer ist Admin auf Rechner2.

Ich würde mich über eine Alternative oder Lösung einer der beiden Probleme freuen

Danke im Voraus

Content-ID: 180250

Url: https://administrator.de/contentid/180250

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Lousek
Lousek 08.02.2012 um 16:41:48 Uhr
Goto Top
Sali

Du könntest nach dem sc stop noch ein sleep 5 benutzen ;)

Gruss
lousek
dermoritz
dermoritz 08.02.2012 um 16:48:32 Uhr
Goto Top
und wenn das stoppen 6 sekunden dauert funktionierts wieder nicht - je nach dem was auf dem tomcat läuft kann das stoppen ziemlich lange dauern und ich brauch etwas was immer funktioniert.
Lousek
Lousek 08.02.2012 um 16:50:59 Uhr
Goto Top
Mit sc query nach dem Stoppen des Dienstes den Status abfragen, bis er wirklichg gestoppt ist?

Gruss
lousek
dermoritz
dermoritz 08.02.2012 um 16:52:22 Uhr
Goto Top
kannst mir ein besipiel geben? braucht man da eine Schleife?
Lousek
Lousek 08.02.2012 um 17:00:08 Uhr
Goto Top
Ich denke, dass du es mit Batch machst ...

Ich bin auch nicht wirklich fit in Batch, aber da es keine While schleifen gibt, musst du es wohl "irgendwie" so lösen:

sc stop Tomcat
:while
IF sc query überprüfung goto :next
goto :while

:next
file löschen
sc start Tomcat

Gruss
lousek
Lousek
Lousek 08.02.2012 um 17:05:26 Uhr
Goto Top
oder aber, wie ich gerade entdeckt habe, viel einfacher:

nimm net stop Tomcat und net start Tomcat anstatt sc start, weil bei net stop wartet er bis der Service wirklich gestoppt ist ;)
dermoritz
dermoritz 08.02.2012 um 17:12:54 Uhr
Goto Top
"net" geht aber nur lokal oder?

net ist genau der befehl den ich in der bat-Datei benutze die PSExec ausführen soll - aber das klappt ja leider auch nicht face-plain
Lousek
Lousek 08.02.2012 um 17:15:25 Uhr
Goto Top
Die bat-Datei wird ja aber durch PsExec "lokal" auf dem entfernten Client ausgeführt, also müsste das eigentlich gehen ...

Gruss
lousek
dermoritz
dermoritz 08.02.2012 um 17:17:01 Uhr
Goto Top
und das Problem ist das es eben nicht geht. Die Frage ist warum oder was ich tun kann oder welche ALternativen es gibt.
Lousek
Lousek 08.02.2012 um 17:20:25 Uhr
Goto Top
Wie sieht denn dein Batch-file aus? Oder was kommt für ein Error zurück, wenn net start ausgeführt werden sollte?

Gruss
lousek

Edit:
Bei mir klappt das wunderbar:
C:\Users\xxx\Downloads\PsTools>PsExec.exe \\computer -c C:\temp\test
.bat

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\WINDOWS\system32>net stop DNScache

The DNS Client service was stopped successfully.


C:\WINDOWS\system32>net start DNScache
The DNS Client service is starting.
The DNS Client service was started successfully.

test.bat exited on computer with error code 0.

Batch-file sieht so aus:
net stop DNScache
net start DNScache
dermoritz
dermoritz 08.02.2012 um 17:39:50 Uhr
Goto Top
hast du meine Frage gelesen?
Bei mir klappt es auch wunderbar, wenn ich es aus der konsole starte. Das Problem tritt auf sobald ich das Kommando aus einem Dienst heraus starte (in diesem Fall Jenkins auf Tomcat). Wobei es nicht hilft den Dienst unter einem andere Benutzer auszuführen (z.b. mit dem Benutzer mit dem auch die Konsole gestartet wurde)
Lousek
Lousek 08.02.2012 um 18:31:27 Uhr
Goto Top
Sali

Ja, ich hatte deine Frage gelesen! Aber erst jetzt ist mir klar, wie du es genau meinst, sorry ...

Um bei der Ausführung durch den Dienst die Ausgabe zu "speichern", versuch mal die Ausgabe in eine Datei umzuleiten, also z.B. "start test.bat > C:\logfile.txt 2>&1"

Was steht nachher in der Datei?

Gruss
lousek
dermoritz
dermoritz 09.02.2012 um 09:53:10 Uhr
Goto Top
Danke das war ein sehr guter Hinweis!

Damit bin ich auch auf das http://jenkins.361315.n4.nabble.com/remotely-executing-commands-td34764 ... gestoßen. Es scheint, dass man prinzipiell die Ausgabe und die Errorausgabe umleiten sollte damit es überhaupt aus java/.net heraus funktioniert.
Lousek
Lousek 09.02.2012 um 09:56:28 Uhr
Goto Top
Wenn du also die Ausgabe umleitest, funktioniert es dann? ;)

Gruss
lousek
dermoritz
dermoritz 09.02.2012 um 11:04:38 Uhr
Goto Top
ja! - der link den ich angegeben hab begründet das damit, dass es wohl an java/.net liegt - da muss man wohl immer die ausgabe umleiten.
Lousek
Lousek 09.02.2012 um 11:07:27 Uhr
Goto Top
Perfekt!

Dann den "Close" nicht vergesse ;)

Gruss
lousek
dermoritz
dermoritz 09.02.2012 um 14:27:13 Uhr
Goto Top
-- doch nicht -- es ist unzuverlässlich wie vorher. manchmal kommt errcode eins wie oben und manchmal bleibt psexec einfach hängen. Aus der Konsole funktionieren eigentlich alle Varianten.