Wie kann ich einen Windows-Dienst mithilfe eines Skripts remote neu starten?

7

Ich habe eine Python-Webanwendung, die auf einem CherryPy-Server ausgeführt wird, der als Windows-Dienst ausgeführt wird. Ich habe eine Batchdatei zum Bereitstellen dieser Anwendung, muss jedoch noch einen Remotedesktop auf dem Server einrichten, um den Dienst neu zu starten. Gibt es eine Möglichkeit, dies zu schreiben?

Ich habe es versucht:

psexec \\server "net restart cherrypyservice"

Aber das scheint nicht zu funktionieren.

Jason Baker
quelle
Es gibt keinen "net restart" -Befehl. Sie müssten einen "net stop" und dann einen "net start" ausführen, wenn Sie psexec und den integrierten net-Befehl verwenden oder den psservice verwenden möchten, der auch Teil von sysinternals ist Suite, die andere bereits unten erwähnt haben
Rex

Antworten:

9

Sie könnten das Befehlszeilentool sc verwenden, aber ich weiß nicht, wie ich es speziell in Python machen soll.

/programming/133883/stop-and-start-a-service-via-batch-or-cmd-file/133926#133926

BESCHREIBUNG: SC ist ein Befehlszeilenprogramm, das für die Kommunikation mit dem NT Service Controller und den Diensten verwendet wird. VERWENDUNG: sc [Befehl] [Dienstname] ...

  The option  has the form "\\ServerName"
  Further help on commands can be obtained by typing: "sc [command]"
  Commands:
    query-----------Queries the status for a service, or
                    enumerates the status for types of services.
    queryex---------Queries the extended status for a service, or
                    enumerates the status for types of services.
    start-----------Starts a service.
    pause-----------Sends a PAUSE control request to a service.
    interrogate-----Sends an INTERROGATE control request to a service.
    continue--------Sends a CONTINUE control request to a service.
    stop------------Sends a STOP request to a service.
    config----------Changes the configuration of a service (persistant).
    description-----Changes the description of a service.
    failure---------Changes the actions taken by a service upon failure.
    qc--------------Queries the configuration information for a service.
    qdescription----Queries the description for a service.
    qfailure--------Queries the actions taken by a service upon failure.
    delete----------Deletes a service (from the registry).
    create----------Creates a service. (adds it to the registry).
    control---------Sends a control to a service.
    sdshow----------Displays a service's security descriptor.
    sdset-----------Sets a service's security descriptor.
    GetDisplayName--Gets the DisplayName for a service.
    GetKeyName------Gets the ServiceKeyName for a service.
    EnumDepend------Enumerates Service Dependencies.

  The following commands don't require a service name:
  sc   
    boot------------(ok | bad) Indicates whether the last boot should
                    be saved as the last-known-good boot configuration
    Lock------------Locks the Service Database
    QueryLock-------Queries the LockStatus for the SCManager Database

BEISPIEL: sc starte MyService

Keng
quelle
Sie müssten beide STOP und dann START ausführen, um Ihren RESTART-Effekt zu erzielen.
Brett Veenstra
Ich mache das sowieso nicht in Python, also funktioniert das perfekt. Ich werde es testen, wenn ich zur Arbeit komme!
Jason Baker
7

Verwenden von Russinovichs psservice :

 psservice \\server restart cherrypyservice
gabr
quelle
3

Wenn Sie psexec verwenden möchten:

psexec \\Server cmd "/c net stop servicename"
psexec \\Server cmd "/c net start servicename"

In diesem Fall wird sc empfohlen. Es macht alles, was Sie brauchen, wenn Sie berappen wollen.

K. Brian Kelley
quelle
2

Versuchen

psexec \\server net stop cherrypyservice
psexec \\server net start cherrypyservice
Richard Slater
quelle
2
net stop cherrypyservice
net start cherrypyservice

mit welcher Remote Execution Engine Sie bevorzugen.

Richard Gadsden
quelle
0

Interaktive Verwendung von PowerShell (lokal):

get-service $servicename  | restart-service

Interaktive Verwendung von PowerShell (remote):

(gwmi win32_service -computer $comp -Filter "name='$serviceName'").StopService()
(gwmi win32_service -computer $comp -Filter "name='$serviceName'").StartService()

In einer Funktion (remote):

function restart-remoteservice{
     param($servicename,$computer)
     (gwmi win32_service -computer $computer -Filter "name='$serviceName'").StopService()
     (gwmi win32_service -computer $computer -Filter "name='$serviceName'").StartService()
}
James Pogran
quelle
0

Verwenden der WMI-Methode

(Get-WmiObject win32_service -computer stp7cor1737ltv4 -filter "Name = 'SPtimerv3'"). Invokemethod ("StartService", $ null)

Joshua
quelle
0

(gwmi win32_service -computer $ comp -Filter "name = '$ serviceName'"). StopService () (gwmi win32_service -computer $ comp -Filter "name = '$ serviceName'"). StartService ()

Hallo

Gibt es eine Möglichkeit, mit dem obigen Befehl einen Dienst und seine Abhängigkeiten neu zu starten? Wie zwinge ich es dazu? Gibt es einen Befehl zum Erzwingen?

Ich weiß, dass es -f in psservice gibt, aber ich kann es hier nicht herausfinden


quelle
0
psservice \\server restart cherrypyservice

(Wo psservice eine andere SysInternals-App ist)

oder

sc \\server stop cherrypyservice
sc \\server start cherrypyservice
gWaldo
quelle