服务挂了发邮件通知(重启服务)的.bat脚本
在项目的开发过程中,因为服务器资源的原因,服务经常被挤挂掉,但是服务是生成数据的,又比较重要,不能长期挂掉,所以就有需要一个脚本来监控服务的状态,如果服务挂了,就发邮件通知。
1. 发邮件的实现
发邮件使用的是blat,关于blat的基本使用,可以参考这篇博客。
配置好blat之后,需要写一个发邮件的脚本,下面的是一个例子:
@echo off
:::::::::::::: 参数设置::::::::::::::
set serverName=%1%
set from=from@qq.com
set user=user@qq.com
set pass=pass
set to=to@qq.com
set subj=邮件标题
:: 邮件正文
set mail=body.txt
:: 附件地址
set attach=*.jpg
set server=smtp.qq.com
set debug=-debug -log blat.log -timestamp
echo ::::::::::::::::: 运行blat :::::::::::::::::
.\blat -to %to% -charset Gb2312 -subject %subj% -body %serverName% -server %server% -f %from% -u %user% -pw %pass% %debug%
说明一下,如果需要发送固定的内容,可以创建一个body.txt文件,然后这个脚本就会读取txt文件中的内容发送。
因为我这里需要监控好几个服务,所以我用serverName这个变量来接收其他脚本的传参来实现动态的邮件正文。
另外,这里的pass不是你邮箱的地址,而是开通SMTP服务后的授权码

QQ邮箱这里有点小问题,我只开启第一个POP3/SMTP服务的时候,经常会自动关闭,但是开启了两个之后就没出现这个问题了。
2. 监控服务的脚本
@echo off
title isos监控脚本,勿关
::定义循环间隔时间
set secs=600
::启用延缓环境变量,可以在循环中对变量赋值
setlocal enabledelayedexpansion
:loop
set stop=include:
for /f "tokens=1,2 delims==" %%a in (server.txt) do (
netstat -ano | findstr %%b
if ERRORLEVEL 1 set stop=!stop!,%%a
)
if !stop!==include: (
echo %date% %time%: 服务正常运行
) else (
call sendEmail.bat "!stop!"
)
ping -n %secs% 127.0.0.1 > nul
goto loop
这里需要创建一个名为server.txt的文本,存放需要监控的服务名称,格式如下:
MQTT=0.0.0.0:18083
ES=0.0.0.0:9200
datapool=0.0.0.0:10086
ibms=0.0.0.0:18510
3. 启动脚本
将blat.exe,server.txt和监控脚本,发邮件脚本放在同一个文件夹下,启动监控脚本,当关注的服务挂掉时,监控脚本会调用发邮件脚本给配置的邮箱发邮件提醒。
4. 修改脚本实现服务挂掉后重启服务
如果说我现在不想在服务挂掉了(比如资源不足什么的)之后邮件通知我,而是直接重启服务,那么我们直需要对2中的脚本做一下小小的改动即可。
@echo off
title datapool监控脚本,勿关
::定义循环间隔时间
set secs=180
::启用延缓环境变量,可以在循环中对变量赋值
setlocal enabledelayedexpansion
:loop
set stop=include:
for /f "tokens=1,2 delims==" %%a in (server.txt) do (
netstat -ano | findstr %%b
if ERRORLEVEL 1 set stop=!stop!,%%a
)
if !stop!==include: (
echo %date% %time%: 服务正常运行
) else (
echo %date% %time%: 服务挂了,重启服务
start C:\Users\Administrator\AppData\Local\Jenkins\.jenkins\workspace\imedical-hil-isos\script\windows\hil-isos-datapool.cmd
)
ping -n %secs% 127.0.0.1 > nul
goto loop
可以看到,唯一的变化就是在检测到服务挂掉之后,去做的操作是调用jenkins的启动脚本。

浙公网安备 33010602011771号