标题: [系统相关] 【已解决】收集远程服务器信息的bat思路或者技术性的问题 [打印本页]
作者: Linux9253 时间: 2015-7-7 15:15 标题: 【已解决】收集远程服务器信息的bat思路或者技术性的问题
最近在大家的帮助下写了一个bat脚本、用于收集远程服务器上的一些系统和服务方面的信息、
脚本运行后会生成一个存放信息的文件、然后上传至ftp,本地在用ftp下载查看(整个过程10秒左右)、脚本是循环的问题是、
脚本在服务器上运行的时候可能会因为网络的问题、脚本上传ftp的时候偶尔会卡2,3分钟左右、导致信息文件没有即时更新
本地下载的文件也不是即时的、所以我想在服务器上写一个脚本、用于监视信息文件内部的时间、以秒为单位。
如果文件内部的时间和服务器系统时间误差超过15秒就杀死正在运行的收集信息的脚本、
问题来了、、、
领导说服务器上同时不止一个bat脚本在运行、这就导致在杀进程的时候会有多个"cmd.exe"、为难了。。。
后来向进程名字一样、那PID是唯一的、可是怎么知道正在运行的脚本PID是多少呢、
比如脚本A ,A在运行的时候有没有办法知道自身的PID是多少呢、如果知道就好办了、导出到指定文件、然后监控脚本读取、
时间误差大的话、针对PID杀脚本进程、
可能是思路、更多的是技术问题把、、、求大神帮忙。。。
作者: pcl_test 时间: 2015-7-7 15:55
脚本中,加title,筛选title即可
作者: CrLf 时间: 2015-7-7 16:00
http://www.bathome.net/s/tool/?key=ppids
用法详见:
http://www.bathome.net/thread-23031-1-1.html
作者: Linux9253 时间: 2015-7-7 16:03
回复 2# pcl_test
加上去之后只能说明、dos窗口标志是唯一的、但脚本好像判断不出来吧、如果人工可以看出来
比如 title 服务器
那脚本怎么筛选“服务器”的这个窗口的呢、又是怎么杀死这个窗口的呢?
作者: Linux9253 时间: 2015-7-7 16:09
回复 3# CrLf
都是好东西啊、有时间学习下、
可惜领导不让我用在服务器上用第三方的软件
还是谢谢哈
作者: pcl_test 时间: 2015-7-7 16:24
回复 4# Linux9253
taskkill /f /fi "windowtitle eq 窗口标题"
作者: CrLf 时间: 2015-7-7 16:33
获取当前进程 pid 的技巧,输出到文本:- @wmic process where name="wmic.exe" get ParentProcessId /value>PID.txt
复制代码
不能放在 for /f 中运行,因为这样取到的父进程 PID 不是当前进程
如果有文件夹洁癖,不想使用临时文件的话,可以玩个结构:- %1 @wmic process where name="wmic.exe" get ParentProcessId /value | %0 : & exit /b
- ::通过管道交给自身处理,被调用时此句被屏蔽
-
- @echo off
- for /f "delims=" %%a in ('more') do set /a "%%a" 2>nul
- ::取得管道输入,用 set /a 简单过滤输出中的回车符,并赋值
-
- echo %parentprocessid%
- ::parentprocessid 即使最初的 cmd.exe 的 pid
-
- pause<con
- ::因为在管道中,输入句柄得重定向到 stdin
-
- if 时间==[时间] taskkill /t /f /pid %parentprocessid%
- ::若条件符合,则结束指定 pid 及其所有子进程,包括 cmd.exe 和 ftp.exe
复制代码
不过个人建议还是用临时文件比较方便易读
作者: Linux9253 时间: 2015-7-7 16:45
本帖最后由 Linux9253 于 2015-7-7 16:50 编辑
获取当前进程 pid 的技巧,输出到文本:不能放在 for /f 中运行,因为这样取到的父进程 PID 不是当前进程
...
CrLf 发表于 2015-7-7 16:33
都是大牛啊、非常感谢、我在向好像没有什么可以难道你们的。。。谢谢哈
你们都是在那里学习的、真是可爱的一群人、论坛里热心的人还真不少
你刚才提醒了我、好像不用结束脚本、只需要结束ftp进程就行了、因为卡死的不是脚本、而是ftp上传的时候。。。。
作者: CrLf 时间: 2015-7-7 17:00
wmic 需要一定权限,title 的办法比较简单易行,可与 wmic 互补- set title=%random%
- title %title%
复制代码
然后 taskkill /f /fi "windowtitle eq %title%" 就行了,但有个问题,在有管理员权限的 cmd 中(比如关闭 UAC 的情况下),title 前面还有前缀,自己用是没什么问题,如果给别人用就得考虑这个差异
瘟七以上还可以考虑 powershell- powershell -command kill (Get-WmiObject win32_process -Filter "ProcessId=$pid").ParentProcessId
复制代码
作者: Linux9253 时间: 2015-7-7 17:02
回复 9# CrLf
这么多的解决办法、看来我真是井底之蛙啊、不过你们的代码我好像没有格式见过
作者: Linux9253 时间: 2015-7-15 20:00
回复 3# CrLf
大神,我又来打扰你了,有时间的话帮我看看我另外一个贴子的问题呗,比较难/只能找你了
http://www.bathome.net/thread-36516-1-1.html
作者: Linux9253 时间: 2015-7-15 20:00
回复 6# pcl_test
大神,我又来打扰你了,有时间的话帮我看看我另外一个贴子的问题呗,比较难/只能找你了
http://www.bathome.net/thread-36516-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |