用批处理或PowerShell监控系统服务状态并做及时处理

如果系统经常设计一些接口、运行程序以及服务的话,可能会遇到运行程序异常退出了,或者被人不小心关闭了或者服务器重启后没有运行,等等一些运行中被意外中断的事情。这种事情对维护人员来说,很头疼,经常发生接口程序被莫名的关闭了,结果发现的时候数据已经缺少很多天的数据了。为了能比较有效的监控服务程序的运行并及时处理,现较简单的通过批处理设计了一个对windows程序进行监控的后台程序,现将设计介绍如下:

复制以下代码保存为promonitor.bat

@echo off
mode con lines=30 cols=60
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","",1)(window.close)&&exit
cd /d "%~dp0"
@echo off
echo.
echo ========================================
echo == 查询计算机服务的状态, ==
echo == 每间隔%secs%秒种进行一次查询(用任务计划处理), ==
echo == 如发现其停止,则立即启动。 ==
echo ========================================
echo.
echo.
@echo off
for /F "tokens=* delims=" %%a in (promonitor.ini) do call :__monitor "%%a"
:__monitor
@echo off
echo %1
set svrst=0
for /F "tokens=* delims= " %%a in ('net start') do if /I "%%a" == %1 set svrst=1
if %svrst% == 0 net start %1
set svrst=
ps(配置文件promonitor.ini和promonitor.bat 放在同一目录即可)
ini文件列出服务名(显示名称)即可,多个以回车换行隔开:

数据同步工具
SQL Server Agent (MSSQLSERVER)


系统任务计划的配置,这里不具体描述可参考以下链接
windows server 2003
windows server 2008



用 任务计划+PowerShell :
powershell脚本保存为 .ps1 文件, 然后任务计划调用即可, 脚本如下,xxx1, xxx2 需要换成服务名称(不是显示名称):

import-module failoverclusters
get-service|ForEach-Object{if(($_.name -eq 'xxx1' -or $_.name -eq 'xxx2' ) -and $_.status -ne 'running'){start-service $_.name}}
get-clusternode|ForEach-Object{if($_.state -eq 'down'){start-clusternode $_.name}}
get-clusternode|ForEach-Object{if($_.state -eq 'paused'){resume-clusternode $_.name}}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值