如题,让你可以不需要为了supervisor去部署linux系统
::window进程守护,得来全不费功夫
@echo off
title 进程守护者
::检测时间间隔,单位:秒
set _interval=5
::需要守护的进程名称
set _processName=php.exe
::需要守护的进程启动命令
set _processCmd=cmd /k "title spider && php think queue:listen --queue=default --timeout=600 --memory=256 --sleep=3"
::需要守护的进程预估启动完毕所需时间,单位:秒
set _processTimeout=10
::需要守护的进程所监听的端口
set _port=8080
::进程用户名,一般是Administrator
set _username=Lenovo
:LOOP
set /a isAlive=false
::通过进程名称检测
tasklist /FI "username eq %_username%" | find /C "%_processName%" > temp.txt
set /p num= < temp.txt
del /F temp.txt
echo %num%
::通过进程的端口是否正在被监听检测
::netstat -an | find /C "0.0.0.0:%_port%" > temp.txt
::set /p num= < temp.txt
::del /F temp.txt
::%_processCmd%
if %num% LSS 20 (
echo 有进程挂了,需要守护者出动
start %_processCmd% | echo 启动 %_processName% 于 %time%
choice /D y /t %_processTimeout% > nul
)
::当可用的进程小于5个的时候,搞事
if %num% LSS 10 (
echo 关闭所有cmd算了
TASKKILL /F /FI "WINDOWTITLE eq spider*"
choice /D y /t 5 > nul
)
set _processName2=cmd.exe
tasklist /FI "username eq %_username%" | find /C "%_processName2%" > temp2.txt
set /p num2= < temp2.txt
del /F temp2.txt
if %num2% GEQ 30 (
echo cmd太多了
TASKKILL /F /FI "WINDOWTITLE eq spider*"
choice /D y /t 5 > nul
)
if %num% GEQ 20 echo 进程守护成功,windows真香
::ping -n %_interval% 127.1>nul
choice /D y /t %_interval% >nul
goto LOOP