前言
有时候一个程序在windows服务器上启动,会出现命令提示符窗口,cmd那种黑框窗口。客户不懂,或者其他业务部门不懂,顺手给你关了。又或者程序崩溃了,程序直接结束运行了。让人苦恼。
下面两个bat文件,很好的解决了这个问题,只需要复制,修改一下相关地方就可以。
他的作用在于,在windows系统后台每隔几分钟循环Telnet程序端口是否被占用,未被占用就启动。占用,就不做任何操作。
一、先写一个检测端口状态而执行相应操作的bat脚本
需要修改:
1. “port=端口”,这里写需要检测的端口,例如“port=8080”,意为检测8080端口是否被占用。
2.“command=操作命令”,这里写需要操作的命令,例如启动某个jar包“java -jar YourJarFile.jar”。
@echo off
setlocalset port=端口
set command=操作命令echo Testing connectivity to localhost:%port%...
:: 使用 PowerShell 检查端口可达性
powershell -Command "$ErrorActionPreference = 'Stop'; $result = Test-NetConnection -ComputerName localhost -Port %port%; if ($result.TcpTestSucceeded) { exit 1 } else { exit 0 }"if %errorlevel% equ 0 (
echo Port %port% is not reachable.
echo Executing command: %command%
%command%
) else (
echo Port %port% is reachable. Skipping command execution.
)endlocal
改完之后保存文件,名称为“startForTelnet.bat”。
解释:这个bat文件的意思为,Telnet该端口,如果该端口被占用,则不执行你设置的操作命令,如果端口未被占用(说明该程序未启动),则执行你设置的操作命令(一般操作命令设置为启动某个jar包或程序)
二、再写一个bat文件,循环执行上一个bat文件。
需要修改:
1.“targetScript=上一个脚本或程序的路径及名称”,例如:“targetScript=D:\test\startForTelnet.bat”,意为:执行D盘test文件夹里的startForTelnet.bat脚本(上一步脚本的名称)
2.如果想修改时间,可以修改timeout /t后面的120,这里意思为120秒(两分钟),多长时间执行一次可以自行修改
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:beginset "targetScript=上一个脚本或程序的路径及名称"
:loop
echo Calling %targetScript%...:: 调用指定的批处理文件
call "%targetScript%":: 休眠120秒(2分钟)
timeout /t 120 /nobreak >nulgoto loop
解释:
这个脚本意思为:每过两分钟执行一次,某路径下的某脚本或程序。并且隐藏命令提示符的窗口,为后台运行。
如何关闭:
如果想结束该循环命令,关闭脚本。打开任务管理器,找到windows命令处理程序这条,选中结束任务即可
终言
二者组合后,只需要启动第二步的bat文件,便可后台一直循环检测端口是否被占用,如果没被占用,说明程序挂掉了或者被人为误关了,两分钟后进行启动该程序。如果端口已经被占用,说明程序还在,不执行任何操作。
之所以分开两个bat文件,是因为这样有了更多的操作性。有人可能需要第一步就足够了。也有人可能只想弄个后台循环,那么第二步bat文件足矣。
题外话:就这点东西,真心瞧不起还在csdn开收费的文章。