7

I have a Python web application running in a CherryPy server, which is running as a windows service. I have a batch file to deploy this application, but I'm still having to remote desktop in to the server to restart the service. Is there any way to script this?

I tried:

psexec \\server "net restart cherrypyservice"

But this doesn't seem to work.

Jason Baker
  • 1,229
  • 6
  • 20
  • 25
  • there is no "net restart" command.. you would have to do a "net stop" and then a "net start" if you wanted to use psexec and the built-in net command or use the psservice that is also part of sysinternals suite that others have already mentioned below – Rex Aug 25 '10 at 14:41

10 Answers10

9

you could use the sc command-line tool but i don't know how to do it specifically in python.

https://stackoverflow.com/questions/133883/stop-and-start-a-service-via-batch-or-cmd-file/133926#133926

DESCRIPTION: SC is a command line program used for communicating with the NT Service Controller and services. USAGE: sc [command] [service name] ...

  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

EXAMPLE: sc start MyService

Keng
  • 475
  • 3
  • 6
  • 10
7

Using Russinovich's psservice:

 psservice \\server restart cherrypyservice
gabr
  • 363
  • 3
  • 8
3

If you want to use psexec:

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

Though in this case, sc is recommended. It does everything you need if you're going to shell out.

K. Brian Kelley
  • 9,004
  • 31
  • 33
2

try

psexec \\server net stop cherrypyservice
psexec \\server net start cherrypyservice
Richard Slater
  • 3,228
  • 2
  • 28
  • 42
2
net stop cherrypyservice
net start cherrypyservice

with whatever remote execution engine you prefer.

Richard Gadsden
  • 3,696
  • 4
  • 28
  • 58
1

If you have a server that with WinRM enabled on the machines and the PC from which you are deploying the batch file is added to WinRM trusted hosts of the server you can use Invoke-Command

Invoke-Command -ScriptBlock {Restart-Service cherrypyservice} -ComputerName <Server_Name>

You trigger the batch file using Invoke-Command.

I personally use Invoke-Command when trying to do operation on multiple windows servers .

Hope it helps :)

Kiminonawa
  • 11
  • 2
0

write a bat file:

net stop "service name"

net start "service name"

you can remote execute the file on the host using:

psexec \\hostname -c batfile.bat

Guest
  • 1
  • 1
0
psservice \\server restart cherrypyservice

(Where psservice is another SysInternals app)

or

sc \\server stop cherrypyservice
sc \\server start cherrypyservice
gWaldo
  • 11,887
  • 8
  • 41
  • 68
0

Using PowerShell Interactively (localy):

get-service $servicename  | restart-service

Using PowerShell Interactively (remotely):

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

In a function (remotely):

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
  • 121
  • 3
0

Using the WMI method

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