Linux-Windows系统-部署-运维系列导航

 

守护程序的指标

  1. 开机能启动
  2. 正常运行时不守护
  3. 手动关闭进程,守护启动
  4. 只有一个进程
 
本文以windows批处理程序(.bat)来演示守护程序,也可以使用其他方式,如Python、VB等脚本语言,当然也可以使用C/C++、C#、Java等高级语言编写守护程序,只是一般情况,脚本语言更灵活。
 

开机启动

windows开机启动可以通过windows计划任务实现,当然也可以通过注册表、启动程序等方式,本文以windows计划任务方式实现。
打开计算机管理 Win10计算机管理功能怎么开,依次展开计算机管理(本地) -> 任务计划程序 -> 任务计划程序库,创建任务即可,需要关注如下关键参数
  • 配置系统启动触发器
  • 配置周期监测触发器
 

服务运行监测

关于守护程序的2、3、4指标,需要在守护程序中实现,其中,需要考虑如下关键节点
  • 定位服务进程,可以通过进程名称、监听端口号
  • 停止服务进程,可以通过taskkill,也可以通过服务支持的其他操作,如nginx -s stop
  • 启动服务进程,需要关注是否指定配置文件、启动参数,等
  • 记录核心日志,便于事后排查分析总结
 

守护脚本模板

以TestDaemon.exe(监听8099端口)为例,守护脚本示例
::本方案需要配合windows计划任务执行,防止批处理自行定时异常退出
@echo off  
::需要守护的进程名称  
set _processName=TestDaemon.exe
  
::需要守护的进程启动命令  
set _processCmd=.\TestDaemon.exe
  
::需要守护的进程所监听的端口  
set _port=8099 

::注意:批处理不会自动创建文件夹
set _logPath=.\monitor.log\%date:~0,4%-%date:~5,2%.log
  
::格式化日期时间,用于打印日志
call :getDateTime
  
::通过进程的端口是否正在被监听检测  
netstat -an | find /C "0.0.0.0:%_port%" > temp.txt  
set /p num1= < temp.txt  
del /F temp.txt

if "%num1%" == "0"  (  
        start %_processCmd% | echo %check_date% %check_time% Start %_processName% >> %_logPath%
)  else (
    echo %check_date% %check_time% conn: %conn% %_processName% OK >> %_logPath%
)

::格式化日期时间函数
:getDateTime
::日期 yyyyMMdd
set check_date=%date:~0,4%-%date:~5,2%-%date:~8,2%

::时间 HH:mm:ss
set check_time=%time:~0,2%
if /i %check_time% LSS 10 (
    set check_time=0%time:~1,1%
)
set check_time=%check_time%:%time:~3,2%:%time:~6,2%
goto:eof

 

posted on 2023-09-06 09:22  xiaoyaozhe  阅读(93)  评论(0编辑  收藏  举报