[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]批处理怎样根据LOG最后修改时间判断程序是否在运行?

本帖最后由 jijo 于 2012-7-24 13:03 编辑

有款软件会自动产生日志文件A.TXT,若日志文件A.TXT的最后修改时间与当前系统时间相差不大于5分钟,则表示该软件正常运行中。

若时间间隔大于5分钟以上,则判断该程序假死或者已经停止服务,但实际上软件的进程并未关闭。

希望批处理根据计划时间检查该程序,若日志文件时间差大于5分钟,能发邮件提醒相关人员。

以前有调试过一个是通过tasklist 判断程序进程是否存在的批处理。但是并不适用上面的问题,麻烦各位大大了~

批处理判断一个文件在最近5分钟内是否被更新过

问题背景描述:

检测程式查看一个X.log的文本里的时间,类似2008-11-1 12:00:00 这样的格式,因为log当中每3分钟会刷新一次,所以时间也会变,现在我的思路是用程式抓到的最新也就是最大的时间和系统时间做比对,超过5分钟,则说明系统的log已经没有再生成(系统已经死了),然后确认死了之后,在连接上Oracle的一个DB,把一些栏位的资料 insert into 到一张用来发送alarm mail的table当中去。不知道bat文档能否实现。
  1. @echo off
  2. set SrcFile=D:\a.txt
  3. for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do (
  4.     set "FileDay=%%a %%b"
  5.     goto :compare
  6. )
  7. :compare
  8. call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
  9. call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~0,2% %time:~3,2% mToday
  10. set /a mMinus=mToday-mFileDay
  11. if %mMinus% gtr 5 (
  12.     echo "The system is down"
  13. ) else (
  14.     echo "The system is running"
  15. )
  16. pause
  17. goto :eof
  18. :DateToMins %yy% %mm% %dd% %hh% %mm% result
  19. setlocal ENABLEEXTENSIONS
  20. set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
  21. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  22. set /a dd=100%dd%%%100,mm=100%mm%%%100
  23. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  24. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  25. if 1%hh% LSS 20 set hh=0%hh%
  26. if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
  27. if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
  28. if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
  29. set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
  30. endlocal&set %6=%j%&goto :EOF
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

看起来楼上的整个程序好复杂。后半部分一大段DateToMins是必须这样配合的么?我机器上运行了米效果。
提示如图。

TOP

回复 3楼 的帖子

把@echo off删掉,多加几个pause,到cmd里面跟踪一下执行过程。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

1,要求:
%%~ta 输出时间为2011-01-12 08:05
%date% 的格式为2011-01-12 ......
%time% 的格式为 8:27:35.25
2,当超过5分钟时,执行 echo 超过时间,可以根据需要改变
3,超时时间为5分钟,单位分,由命令 set/a K=%K: =%*60+1%time:~3,2%-100-5 设置。根据需要可以修改最后这个数字5,范围1-1439
  1. @echo off
  2. set K=%time:~0,2%
  3. set/a K=%K: =%*60+1%time:~3,2%-100-5,D=1%date:~8,2%-100
  4. set/a D-=!!(%K:-=%-K),K+=!!(%K:-=%-K)*1440,H=K/60,F=K-60*H,M=1%date:~5,2%-100-!D,Y=%date:~0,4%-!M,M+=!M*12,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)"
  5. set M=0%M%&set D=0%D%&set F=0%F%&set H=0%H%
  6. for %%a in ("D:\日志.log") do if "%Y%-%M:~-2%-%D:~-2% %H:~-2%:%F:~-2%" gtr "%%~ta" echo 超过时间
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-12 22:12 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

o(∩_∩)o ,寒夜孤星昨晚十点多还在调试代码呀。辛苦了辛苦了。

TOP

返回列表