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.

1
  • 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
    Commented Aug 25, 2010 at 14:41

10 Answers 10

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

2
  • You would need run both STOP, then START to get your RESTART effect. Commented Apr 30, 2009 at 12:23
  • I'm not doing this in Python anyway, so this works perfectly. I'll test it out when I get to work! Commented Apr 30, 2009 at 12:26
7

Using Russinovich's psservice:

 psservice \\server restart cherrypyservice
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.

2

try

psexec \\server net stop cherrypyservice
psexec \\server net start cherrypyservice
2
net stop cherrypyservice
net start cherrypyservice

with whatever remote execution engine you prefer.

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 :)

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()
}
0

Using the WMI method

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

0
psservice \\server restart cherrypyservice

(Where psservice is another SysInternals app)

or

sc \\server stop cherrypyservice
sc \\server start cherrypyservice
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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .