微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查服务是否正在通过batch file运行,并启动它,如果它没有运行?

我想写一个batch file,执行以下操作:

检查服务是否正在运行

如果正在运行,请退出批处理

如果没有运行,请启动服务

我search到的代码样本到目前为止没有工作,所以我决定不发布它们。

开始一项服务是由:

net start "SERVICENAME"

如何检查服务是否正在运行,以及如何在batch file中创buildif语句?

我有点困惑。 我必须通过networking开始的论点是什么? 服务名称或其显示名称

夜间任务将数据库备份到MS Access

Postgresql备份pg_dump不能与Windows任务调度程序一起使用

如何检查调度程序备份是否成功运行

Windows计划任务重新启动后不工作

函数的隐式声明'sched_setaffinity'

linux内核2.4.27中“Niceness”和“Goodness”的区别

将.bat文件转换为Windows计划任务操作

运行matlab m文件并从Windows 7调度程序提供参数

如何安排两个任务?

Windows任务计划程序 – 将文件从URL复制到桌面

要检查服务的状态,请使用sc query <SERVICE_NAME> 。 对于批处理文件中的块, 请检查文档 。

下面的代码将检查服务MyServiceName的状态,如果它没有运行,则启动它(如果服务未运行,将执行if块):

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr " STATE"') do ( if /I "%%H" NEQ "RUNNING" ( REM Put your code you want to execute here REM For example,the following line net start "MyServiceName" ) )

它做什么的解释:

查询服务的属性

查找包含文字“STATE”的行

标记这条线,并且拉出第三个标记,它是包含服务状态的标记

根据字符串“RUNNING”测试结果状态

至于你的第二个问题,你将要传递给net start是服务名称, 而不是显示名称

要切换服务,请使用以下内容;

NET START“分布式事务处理协调器”|| NET STOP“分布式事务处理协调器”

您可以使用以下命令查看服务是否正在运行:

sc query [ServiceName] | findstr /i "STATE"

当我运行它为我的NOD32 Antivirus,我得到:

STATE : 4 RUNNING

如果停止,我会得到:

STATE : 1 STOPPED

你可以在一个变量中使用它来决定你是否使用NET START。

服务名称应该是服务名称,而不是显示名称

这应该做到这一点:

FOR %%a IN (%svcs%) DO (SC query %%a | FIND /i "RUNNING" IF ERRORLEVEL 1 SC start %%a)

语言独立版本。

@Echo Off Set ServiceName=Jenkins SC queryex "%serviceName%"|Find "STATE"|Find /v "RUNNING">Nul&&( echo %serviceName% not running echo Start %serviceName% Net start "%serviceName%">nul||( Echo "%serviceName%" wont start exit /b 1 ) echo "%serviceName%" started exit /b 0 )||( echo "%serviceName%" working exit /b 0 )

在Windows上使用Windows,如果使用西班牙语Windows,代码是:

for /F "tokens=3 delims=: " %%H in ('sc query MYSERVICE ^| findstr " ESTADO"') do ( if /I "%%H" NEQ "RUNNING" ( REM Put your code you want to execute here REM For example,the following line net start MYSERVICE ) )

Reemplazar MYSERVICE con el nombre del servicio que se desea procesar。 Puedes ver el nombre del servicio viendo las propiedades del servicio。 (将MYSERVICE替换为要处理的服务的名称,您可以在服务属性中看到该服务的名称。)

我只是发现这个线程,并希望添加到讨论如果该人不想使用批处理文件来重新启动服务。 在Windows中,如果转到服务,服务属性,然后恢复,则有一个选项。 在这里你可以设置服务的参数。 喜欢重新启动服务,如果服务停止。 此外,你甚至可以有第二次失败尝试做一些不同的事情,在重新启动计算机。

@echo off color 1F @sc query >%COmpuTERNAME%_START.TXT find /I "AcPrfMgrSvc" %COmpuTERNAME%_START.TXT >nul IF ERRORLEVEL 0 EXIT IF ERRORLEVEL 1 NET START "AcPrfMgrSvc"

我也想要一个电子邮件发送,如果服务是以这种方式开始,所以加了一点@Ic代码只是想我会张贴,以防万一它帮助任何人。 我使用SendMail,但还有其他的命令行选项如何从Windows批处理文件发送简单的电子邮件

set service=MyServiceName for /F "tokens=3 delims=: " %%H in ('sc query %service% ^| findstr " STATE"') do ( if /I "%%H" NEQ "RUNNING" ( net start %service% for /F "tokens=3 delims=: " %%H in ('sc query %service% ^| findstr " STATE"') do ( if /I "%%H" EQ "RUNNING" ( SendMail /smtpserver localhost /to [email protected] /from [email protected] /subject Service Autostart Notification /body Autostart on service %service% succeded. ) else ( SendMail /smtpserver localhost /to [email protected] /from [email protected] /subject Service Autostart Notification /body Autostart on service %service% Failed. ) ) ) )

使用Powershell脚本启动服务。 您可以将其链接到任务计划程序并按需要间隔或触发它。 创建这个PS1文件,即扩展名为PS1的文件,然后让这个文件从任务调度器中被触发。

开始停止服务

在任务调度程序中,如果您在服务器上使用它,请在参数中使用它

-noprofile -executionpolicy bypass -file“C: Service Restart Scripts StopService.PS1”

通过在cmd上运行相同的验证,如果它工作,它也应该在任务调度器上工作

$Password = "Enter_Your_Password" $UserAccount = "Enter_Your_AccountInfor" $MachineName = "Enter_Your_Machine_Name" $ServiceList = @("test.socketService","test.WcfServices","testDesktopService","testService") $PasswordSecure = $Password | ConvertTo-securestring -AsPlainText -Force $Credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $UserAccount,$PasswordSecure $LogStartTime = Get-Date -Format "MM-dd-yyyy hh:mm:ss tt" $FileDateTimeStamp = Get-Date -Format "MM-dd-yyyy_hh" $LogFileName = "C:UserskrakhilDesktopPowershellLogsstartService_$FileDateTimeStamp.txt" #code to start the service "`n####################################################################" > $LogFileName "####################################################################" >> $LogFileName "###################### STARTING SERVICE ##########################" >> $LogFileName for($i=0;$i -le 3; $i++) { "`n`n" >> $LogFileName $ServiceName = $ServiceList[$i] "$LogStartTime => Service Name: $ServiceName" >> $LogFileName Write-Output "`n####################################" Write-Output "Starting Service - " $ServiceList[$i] "$LogStartTime => Starting Service: $ServiceName" >> $LogFileName Start-Service $ServiceList[$i] $ServiceState = Get-Service | Where-Object {$_.Name -eq $ServiceList[$i]} if($ServiceState.Status -eq "Running") { "$LogStartTime => Started Service Successfully: $ServiceName" >> $LogFileName Write-Host "`n Service " $ServiceList[$i] " Started Successfully" } else { "$LogStartTime => Unable to Stop Service: $ServiceName" >> $LogFileName Write-Output "`n Service didn't Start. Current State is - " Write-Host $ServiceState.Status } } #code to stop the service "`n####################################################################" > $LogFileName "####################################################################" >> $LogFileName "###################### STOPPING SERVICE ##########################" >> $LogFileName for($i=0;$i -le 3; $i++) { "`n`n" >> $LogFileName $ServiceName = $ServiceList[$i] "$LogStartTime => Service Name: $ServiceName" >> $LogFileName Write-Output "`n####################################" Write-Output "Stopping Service - " $ServiceList[$i] "$LogStartTime => Stopping Service: $ServiceName" >> $LogFileName Stop-Service $ServiceList[$i] $ServiceState = Get-Service | Where-Object {$_.Name -eq $ServiceList[$i]} if($ServiceState.Status -eq "Stopped") { "$LogStartTime => Stopped Service Successfully: $ServiceName" >> $LogFileName Write-Host "`n Service " $ServiceList[$i] " Stopped Successfully" } else { "$LogStartTime => Unable to Stop Service: $ServiceName" >> $LogFileName Write-Output "`nService didn't Stop. Current State is - " Write-Host $ServiceState.Status } }

@Echo off Set ServiceName=wampapache64 SC queryex "%serviceName%"|Find "STATE"|Find /v "RUNNING">Nul&&( echo %serviceName% not running echo Net start "%serviceName%" SC queryex "%serviceName%"|Find "STATE"|Find /v "RUNNING">Nul&&( Echo "%serviceName%" wont start ) echo "%serviceName%" started )||( echo "%serviceName%" was working and stopping echo Net stop "%serviceName%" ) pause

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐