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.

link|improve this question

50% accept rate
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
feedback

10 Answers

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

http://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

link|improve this answer
You would need run both STOP, then START to get your RESTART effect. – Brett Veenstra Apr 30 '09 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! – Jason Baker Apr 30 '09 at 12:26
feedback

Using Russinovich's psservice:

 psservice \\server restart cherrypyservice
link|improve this answer
feedback

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.

link|improve this answer
feedback

try

psexec \\server net stop cherrypyservice
psexec \\server net start cherrypyservice
link|improve this answer
feedback
net stop cherrypyservice
net start cherrypyservice

with whatever remote execution engine you prefer.

link|improve this answer
feedback

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()
}
link|improve this answer
feedback

Using the WMI method

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

link|improve this answer
feedback

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

Hello

Using the above command, is there a way where I can restart a service and its dependencies. How do I force it to do so, Is there a force command?

I know there is -f in psservice but I cannot figure it out here

link|improve this answer
feedback

I have script for starting services but I can't get it to work propparly I know the start-service command only works localy but I can't seem to get the (gwmi win32_service -computer $comp -Filter "name='$serviceName'").StartService() command to work, I get the following error

You cannot call a method on a null-valued expression. At line:1 char:146 + (Get-WmiObject win32_service -computer cap-test4-biz1 -Credential captest\jola_adm -filter "Name='BTSSvc$BizTalkServerApplication'").invokemethod <<<< ("StartService",$null) + CategoryInfo : InvalidOperation: (invokemethod:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

i have pastet the script below, hopeing some one can help

  $computername = "remoteserver"
    $password = type H:\Powershell\MyPassword.txt | ConvertTo-SecureString
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist “domain\user”,$password


    function StartIfStopped([string]$ServiceName) {
        $Service = Get-WmiObject Win32_Service -computername $computername -cred $cred -Filter "name='$ServiceName'"
        if (!$Service) {
            # Service is not installed
            Write-Host "$ServiceName is not installed on this machine."
        } else {
            # Service is installed
            if ($Service.State -eq "Stopped") {
                if ($Service.StartMode -eq "Disabled") {
                    Write-Host "Cannot start service $ServiceName as it is disabled."
                } else {
                    Write-Host "Starting service $ServiceName ..."

                    Start-Service $ServiceName


                }           
            } else {
                Write-Host "$ServiceName is already running."
            }
        }
    }

    StartIfStopped 'BTSSvc$BizTalkServerApplication' 
    StartIfStopped 'BTSSvc$TASMSMQHost'
    StartIfStopped 'BTSSvc$TASProcessingHost'
    StartIfStopped 'BTSSvc$TASSendHost'
    StartIfStopped 'BTSSvc$TASTrackingHost'
link|improve this answer
feedback
psservice \\server restart cherrypyservice

(Where psservice is another SysInternals app)

or

sc \\server stop cherrypyservice
sc \\server start cherrypyservice
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.