标题: [文本处理] 【求助】监控系统进程是否运行,并写入txt启动时间和次数 [打印本页]
作者: Covben 时间: 2018-5-24 15:30 标题: 【求助】监控系统进程是否运行,并写入txt启动时间和次数
win2008,有个进程常自己关闭,想写一个BAT,每隔10分钟检测系统进程里是否有该进程。
如有,则再继续监控,如没有,则启动该程序,并同时生成一个 txt 文件,将每一次的启动时间记录下来。
=========== 想象中的输出结果 ==========
2018年05月24日星期四9:09:50;启动第1次
2018年05月24日星期四9:11:01;启动第2次
2018年05月24日星期四9:11:08;启动第3次
2018年05月24日星期四9:11:27;启动第4次
2018年05月24日星期四9:11:40;启动第5次
2018年05月24日星期四9:11:53;启动第6次
2018年05月24日星期四9:12:25;启动第7次
2018年05月24日星期四9:14:29;启动第8次
2018年05月24日星期四11:55:22;启动第9次
2018年05月24日星期四11:56:28;启动第10次
...
如此类推
================================
附上自己写的代码:
---------------------------
@ECHO OFF
:check
tasklist > %temp%\tasklist.txt
find /i %temp%\tasklist.txt "admin.exe"
cls
if errorlevel 1 (goto st) else ((set a=6)&(goto show)) 脚本里的a=6是为了测试,将时间设为 6秒检测一次
:st
start D:\AutoUpdate\Client.exe 启动的程序路径
echo %date:~0,4%年%date:~5,2%月%date:~8,2%日星期%DATE:~-1%%time:~0,8%;启动第 ? 次 >> E:\Client_Logs.txt
cls
set a=6 脚本里的a=6是为了测试,将时间设为 6秒检测一次
goto show
:show
set /a a=a-1
ping -n 2 -w 500 127.1>nul
cls
echo.
echo 请勿关闭本窗口
echo\
echo.
echo.
echo.
echo 后台服务已经运行,10分钟后再检测!! 倒计时:%a% 秒
if %a%==0 (goto check) else (goto show)
------------------------------------------------------
我已经实现了某一行的前半部分功能, 如:2018年05月24日星期四11:56:28
后半功能就不懂搞了: 启动第10次... (这个次数会随着启动该程序的次数而递增的。。。)
请各位高手解答。谢谢!!!
作者: yhcfsr 时间: 2018-5-24 17:46
本帖最后由 yhcfsr 于 2018-5-24 18:14 编辑
以优酷为例,按需改第2,3行;输出文件路径改第11行:- @echo off
- set "task=youku"
- set "prog_path=E:\APP\YouKu\YoukuClient\Youku.exe"
- set "start_times=0"
- :begin
- set "find_task="&set "event_record="
- for /f "delims= " %%a in ('tasklist^|findstr /i /r "%task%"') do set "find_task=true"
- if not defined find_task (start "" "%prog_path%"&set/a start_times+=1)
- if not defined find_task (set "event_record=%date%%time% ;启动第%start_times%次")
- if defined event_record (echo;%event_record%)
- if defined event_record (echo;%event_record%)>>"event.log"
- timeout /t 600 /nobreak
- goto:begin
复制代码
第二种方案,用以下脚本启动程序,程序运行中,脚本暂停扫描;一旦进程中止,立即启动程序,不会有延时。
无论从资源占用还是程序功能,这种方案比第一种都要有优势。- @echo off
- set "task=youku"
- set "prog_path=E:\APP\YouKu\YoukuClient\Youku.exe"
- set "start_times=0"
- :begin
- set "start_record="
- tasklist|findstr /ri "%task%"||(
- set/a "start_times+=1"&setlocal enabledelayedexpansion
- set "start_record=%date%%time%;启动!start_times!次"
- echo;!start_record!
- echo;!start_record!>>envent.log
- endlocal
- "%prog_path%"
- )
- goto:begin
复制代码
作者: Covben 时间: 2018-5-25 09:31
以优酷为例,按需改第2,3行;输出文件路径改第11行:第二种方案,用以下脚本启动程序,程序运行中,脚本暂停 ...
yhcfsr 发表于 2018-5-24 17:46
谢谢热心解答,你的代码很简单,但却能很好的解决我提出的问题。给你点32个赞!!!谢谢。。
那我再提个小要求吧,如我的例子般,可以在 cmd 窗口里不要显示一些记录,就固定显示一些警示的内容,
如:
-------------------------
请勿关闭本窗口
正在实时监控后台服务是否运行...
--------------------------
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |