中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 07:28
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]检测系统存活的程式 查看 3,729 回复 49
楼 主 [已结]检测系统存活的程式 发表于 2008-11-22 14:41 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
哪位能人能写这样一个检测系统存活的程式
描述:
检测程式查看一个X.log的文本里的时间,类似2008-11-1 12:00:00 这样的格式,因为log当中每3分钟会刷新一次,所以时间也会变,现在我的思路是用程式抓到的最新也就是最大的时间和系统时间做比对,超过5分钟,则说明系统的log已经没有再生成(系统已经死了),然后确认死了之后,在连接上oracle的一个DB,把一些栏位的资料 insert into 到一张用来发送alarm mail的table当中去(发送的例如:PETER,6543,PETER@126.com)去。不知道bat文档能否实现。

先谢过了

[ Last edited by HAT on 2008-11-26 at 13:41 ]
2 发表于 2008-11-22 15:41 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
在线等 急
高手请进~
3 发表于 2008-11-22 23:46 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set SrcFile=C:\test\X.log
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
goto :Oracle
)
) else (
goto :Oracle
)

:Oracle
set oraName=USERNAME
set oraPass=PASSWORD
set oraDB=DATABASENAME
set oraSql=%temp%\myOra.sql
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB%
rem 请参照上面一句代码的格式自行添加insert语句
start sqlplus /nolog @"%oraSql%"
4 发表于 2008-11-23 02:05 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
set SrcPath=%SrcFile:\=\\%
这行需要改吗
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB%
按照上面 是不是把insert into的语句写在oraSql.sql中去啊
还是要写在bat里面啊
例如
>"%oraSql%" inert into *****_tbl;
value ( )

[ Last edited by win007 on 2008-11-23 at 02:20 ]
5 发表于 2008-11-23 02:10 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
请问 您写的是文件修改时间和系统时间做比较吗?
6 发表于 2008-11-23 02:47 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
set SrcPath=%SrcFile:\=\\%
这行需要改吗

不需要改
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB%
按照上面 是不是把insert into的语句写在oraSql.sql中去啊
还是要写在bat里面啊
例如
>"%oraSql%" inert into *****_tbl;
value ( )

目的是写到oraSql.sql文件里面
>"%oraSql%" echo inert into xxx
请问 您写的是文件修改时间和系统时间做比较吗?

是的
7 发表于 2008-11-23 11:14 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
@echo off
set SrcFile=G:a.txt
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do

set FileDay=%%a
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
goto :echo"The system is down"
)
) else (
goto :echo"The system is running"
)
pause

由于在测试的时候,我想用大于5min并且小于0
min,显示system is down
而否则 就显示system is running
但是没有达到预期的目的
望 斑竹 指教
8 发表于 2008-11-23 11:38 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
@echo off
set SrcFile=G:a.txt
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
echo "The system is down"
)
) else (
echo "The system is running"
)
pause


显示结果:
无可用范例
运算符不存在
“The system is running"

不知为何?
system应该按条件来说已经死了
9 Re 8楼 发表于 2008-11-23 11:49 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
第二行少了一个斜线,应为:
set SrcFile=G:\a.txt

请修改以后重新测试
10 发表于 2008-11-23 12:33 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do

set FileDay=%%a
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
echo "The system is down"
)
) else (
echo "The system is running"
)
pause

虽然改过,但是还是结果是 The system is running

事实上 a.txt 是昨天更新的 到现在没有更新过,应该显示的是 The system is down

不知为何?
11 发表于 2008-11-23 13:20 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
set Today=%%a
)
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do (
set FileDay=%%a
)
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
echo %Today%
echo %FileDay%
echo %MinusD%
echo %MinusT%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
echo "The system is down"
) else (
echo "The system is running"
)
) else (
echo "The system is down"
)
pause

结果贴出来看看

[ Last edited by HAT on 2008-11-23 at 13:22 ]
12 发表于 2008-11-23 13:37 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
结果如下:
20081123130705.781000+480
20081121213832.420000+480
2
-825
"The system is down"1

我刚刚手动更新 a.txt,结果也如上
13 发表于 2008-11-23 13:40 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
结果如下:
20081123130705.781000+480
20081121213832.420000+480
2
-825
"The system is down"


没有”1“
14 发表于 2008-11-23 13:59 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
加上变量初始化,再试试。
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
set Today=
set FileDay=
set MinusD=
set MinusT=
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
set Today=%%a
)
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get LastModified /value') do (
set FileDay=%%a
)
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
echo %Today%
echo %FileDay%
echo %MinusD%
echo %MinusT%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
echo "The system is down"
) else (
echo "The system is running"
)
) else (
echo "The system is down"
)
pause

原来是第二个wmic取错数据了,已更新。

[ Last edited by HAT on 2008-11-23 at 14:03 ]
15 发表于 2008-11-23 14:11 ·  中国 上海 浦东新区 电信
初级用户
积分 45
发帖 44
注册 2008-11-22 14:09
17年会员
UID 131752
性别 男
状态 离线
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
set Today=
set FileDay=
set MinusD=
set MinusT=
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
set Today=%%a
)
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get LastModified /value') do (
set FileDay=%%a
)
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
echo %Today%
echo %FileDay%
echo %MinusD%
echo %MinusT%
if %MinusD% leq 0 (
if %MinusT% gtr 5 (
goto :Oracle
) else (
echo "The syestem is runnning"
)
) else (
goto :Oracle
)

:Oracle
set oraName=USERNAME
set oraPass=PASSWORD
set oraDB=DATABASENAME
set oraSql=%temp%\myOra.sql
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB%
rem 请参照上面一句代码的格式自行添加insert语句
start sqlplus /nolog @"%oraSql%"



改过连接DB的代码 如上:
如果系统活着就不用去,连接DB,自动关闭,请问以上代码写的正确吗?
论坛跳转: