1、需求:window环境下对多个java程序进行监控,如果程序意外停止,将自动对任务进行重启。
2、分析:启动java程序后,进程中的任务名称都是java.exe;当程序停止后,我们无法通过文件名称来启动对应的程序。为了能通过任务名称启动对应的java程序,我们必须为每个程序映射对应的taskName,操作为:在jdk的bin目录下,根据需要监控的程序个数,复制java.exe文件个数;并改名成对应的java程序名称,分别使用对应的程序名.exe文件启动对应的jar包;
3、脚本具体代码:
tasklist |find /C "JMSConsumer" >JMSConsumer.txt
set /p consumernum=< JMSConsumer.txt
del /F JMSConsumer.txt
echo %consumernum%
if "%consumernum%" == "0" (
start /D"C:\Users\Desktop\123" JMSConsumer -jar JMSConsumer.jar
)
tasklist |find /C "JMSProducer" >JMSProducer.txt
set /p producernum=< JMSProducer.txt
del /F JMSProducer.txt
echo %producernum%
if "%producernum%" == "0" (
start /D"C:\Users\Desktop\123" JMSProducer -jar JMSProducer.jar
)
4、最后把jk.bat脚本放在window server下添加任务计划程序,做成定时任务
5、相关名词解释:
tasklist是列出所有进程,可以指定只列出某用户的进程,用/FI参数过滤。
find /C可以去tasklist的结果中查找指定进程名,并输出个数,"JMSConsumer" >JMSConsumer.txt将"JMSConsumer"命令的结果输出到"JMSConsumer.txt"这个文本文件中去;
set /p consumernum=< JMSConsumer.txt 将当前命令的返回结果输入到后面的文件中(覆盖) consumernum< 将其后面的文件的内容作为其前面命令的输入
可以用start /D path program去异步调用program程序,也就是不等program指定完毕就执行下面的语句