Windows服务守护程序模板

Windows服务守护程序模板

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

守护程序的指标

开机能启动

正常运行时不守护

手动关闭进程,守护启动

只有一个进程

本文以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 conn= < temp.txt

del /F temp.txt

if "%conn%" == "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

相关文章

痰饮咳嗽病脉证并治十二
365bet娱乐在线

痰饮咳嗽病脉证并治十二

⌛ 09-13 👁️ 7736
南瓜灯笼
bt365登录

南瓜灯笼

⌛ 06-29 👁️ 4425