标题: [其他] [已解决]批处理怎样检测某程序是否运行,如没有则发送邮件通知? [打印本页]
作者: jijo 时间: 2009-12-19 23:08 标题: [已解决]批处理怎样检测某程序是否运行,如没有则发送邮件通知?
求助,我现在这样一个问题。
在某台服务器上,有运行一个程序(AB.EXE)
因为特殊原因,这个程序时常会异常退出。这样就影响到了日常工作。
现在我想通过批处理来定时检测这个AB程序是否在进程中正常运行。
如果有在运行,该批处理不做任何动作退出即可。
如果该程序退出,没有运行,则需要批处理发封邮件给指定邮箱。告知相关人员程序出错,需要及时检查。。
小弟在此多谢各位了。- tasklist /nh|find /i "QQ.exe"
- if ERRORLEVEL 1 (start D:\1.vbs) else (exit)
复制代码
判断QQ是否在运行,不在的话就运行1.VBS执行发邮件通知·
1.VBS的代码如下:-
- Const WshRunning = 0
- Set objEmail = CreateObject("CDO.Message")
- Set objShell = CreateObject("WScript.Shell")
- Set objExec = objShell.Exec("ipconfig")
- CurrentTime=Hour(Now)&":"&Minute(Now)&":"&Second(Now)&"--"
- Do While objExec.Status = WshRunning
- WScript.Sleep 100
- Loop
- If objExec.ExitCode = 0 Then
- Call SendMail("user@163.com","user2@163.com",CurrentTime &"非正常运行~",_
- CurrentTime & "请检查~","smtp.163.com","user","Password")
- End If
-
- Sub SendMail(strFrom,strTo,strSubject,strBody,strSMTPServer,strUser,strPassword)
- objEmail.From = strFrom '发件人
- objEmail.To = strTo '收件人
- objEmail.Subject = strSubject '主题
- objEmail.Textbody = strBody '内容
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
- strSMTPServer
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser '用户名
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassword '密码
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 '明文验证
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
- objEmail.Configuration.Fields.Update
- objEmail.Send
- End Sub
复制代码
[ 本帖最后由 jijo 于 2009-12-21 22:31 编辑 ]
作者: bluewing009 时间: 2009-12-20 00:57
用tasklist查找,用NC(第三方程序)提交数据包即可。通过提交数据包,该法可扩展为时时短信通知
作者: jijo 时间: 2009-12-20 09:54
谢谢楼上的,我现在只实现了用tasklist查找程序,如果没运行则启动该程序,还没达到邮件通知的功能,实时短信哇…那不是更麻烦了…
作者: bluewing009 时间: 2009-12-20 10:17 标题: 回复 3楼 的帖子
以NC方式的话,邮件,短信只不过是数据包不同的问题。我用的方法并不是借助本地已经设置好的邮箱账号,而是通过NC提交数据包模拟登陆邮箱后发邮件同样也能模拟能够提供短信通知的网站发送短信。
作者: jijo 时间: 2009-12-20 15:02
嗯,谢谢楼上的回复。那你能否提供下代码文件,我参考一下…(^-^)
作者: jijo 时间: 2009-12-20 19:51
各位高手,帮帮小弟俺丫…(>_<)
作者: bluewing009 时间: 2009-12-20 20:55
....................... 代码 只能你自己写哦~~
真不行 把斑竹拉来。
作者: jijo 时间: 2009-12-20 21:47
哈哈,斑竹怎么拉哟…
作者: Batcher 时间: 2009-12-20 22:40
参考:批处理发送飞信到手机
http://bbs.bathome.net/thread-6820-1-1.html
作者: jijo 时间: 2009-12-20 22:50
哇塞,管理员都来了。呵呵。。
我想实现的功能就是监控某程序是否在运行,没运行就发封邮件通知就好了。。
飞信的功能是好。但是如果半夜程序挂了,那不是飞信不停的发短信了?
作者: bluewing009 时间: 2009-12-20 22:56 标题: 回复 10楼 的帖子
只要运行一次就退出即可
作者: Batcher 时间: 2009-12-20 23:03 标题: 回复 10楼 的帖子
参考:VBS判断指定日志文件是否定时更新并发送邮件通知
http://bbs.bathome.net/thread-5972-1-1.html
作者: jijo 时间: 2009-12-20 23:16
-
- Const WshRunning = 0
- Set objEmail = CreateObject("CDO.Message")
- Set objShell = CreateObject("WScript.Shell")
- Set objExec = objShell.Exec("ipconfig /al")
- Do While objExec.Status = WshRunning
- WScript.Sleep 100
- Loop
- If objExec.ExitCode = 0 Then
- Call SendMail("user@163.com","user@hotmail.com","命令执行成功",_
- "命令执行成功","smtp.163.com","user","password")
- Else
- strErrorMsg = objExec.StdOut.ReadAll
- Call SendMail("user@163.com","user@hotmail.com;user@163.com","命令执行失败",_
- strErrorMsg,"smtp.163.com","user","password")
- End If
-
- Sub SendMail(strFrom,strTo,strSubject,strBody,strSMTPServer,strUser,strPassword)
- objEmail.From = strFrom '发件人
- objEmail.To = strTo '收件人
- objEmail.Subject = strSubject '主题
- objEmail.Textbody = strBody '内容
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
- strSMTPServer
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser '用户名
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassword '密码
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 '明文验证
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1 '加密连接
- objEmail.Configuration.Fields.Item _
- ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
- objEmail.Configuration.Fields.Update
- objEmail.Send
- End Sub
复制代码
这个是我找到的,是vbs脚本~大家参考参考哈~
谢谢管理员给的例子,我研究去咯~
[ 本帖最后由 jijo 于 2009-12-20 23:17 编辑 ]
作者: Batcher 时间: 2009-12-20 23:20 标题: 回复 13楼 的帖子
发邮件大部分都用类似的VBS脚本,可以在微软的网站上找到例子:
http://www.microsoft.com/china/t ... center/default.mspx
作者: jijo 时间: 2009-12-20 23:40
嗯,刚刚我发的那个VBS脚本就是如果运行出错就发邮件通知.将错误消息发送给用户.如果运行成功也发一个成功邮件给用户.
这样正确错误的邮件都发送给用户,如果定时间隔短些,那数量就相当多了。
目前先需要解决的问题是,判断程序AB.EXE是否在运行,如果程序在运行批处理退出不做任何操作,如果程序不在进程中,则发送邮件通知。
呵呵~研究ing...
作者: bluewing009 时间: 2009-12-21 07:53 标题: 回复 15楼 的帖子
使用tasklist 判断存在即可。
作者: jijo 时间: 2009-12-21 08:54
是的·其实非常的简单。昨晚已经调试成功了~哈哈~~-
- tasklist /nh|find /i "QQ.exe"
- if ERRORLEVEL 1 (start D:\1.vbs) else (exit)
复制代码
判断QQ是否在运行,不在的话就运行1.VBS执行发邮件通知·
[ 本帖最后由 jijo 于 2009-12-21 10:52 编辑 ]
作者: jijo 时间: 2009-12-21 22:32
谢谢版主加分鼓励。
嘿嘿··
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |