Board logo

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

作者: jijo    时间: 2011-1-12 09:42     标题: [已解决]批处理怎样根据LOG最后修改时间判断程序是否在运行?

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

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

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

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

以前有调试过一个是通过tasklist 判断程序进程是否存在的批处理。但是并不适用上面的问题,麻烦各位大大了~
作者: Batcher    时间: 2011-1-12 10:13

批处理判断一个文件在最近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
复制代码

作者: jijo    时间: 2011-1-12 10:53

看起来楼上的整个程序好复杂。后半部分一大段DateToMins是必须这样配合的么?我机器上运行了米效果。
提示如图。
作者: Batcher    时间: 2011-1-12 12:05     标题: 回复 3楼 的帖子

把@echo off删掉,多加几个pause,到cmd里面跟踪一下执行过程。
作者: hanyeguxing    时间: 2011-1-12 13:21

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 编辑 ]
作者: jijo    时间: 2011-1-13 08:59

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2