看门狗Wawa使用说明
1. 关于Wawa
Wawa是看门狗,自动启动须监控的应用程序,并在其进程异常退出时重启。Wawa与MDCS配套,可在Windows、Ubuntu上实现各子系统的守护监控功能,并通过Web API实现与上位机集成。
在开发站 下载Wawa
2. 安装
Wawa使用 .NET 6.0开发,支持跨平台运行。请参考微软 .NET 官网安装 .NET 6.0 Download .NET 6.0 (Linux, macOS, and Windows) (microsoft.com) 。
Wawa的目录结构如下:
WAWA ├─logs // app.log是Wawa运行日志,最多5个文件,文件最大100M ├─programs // 被监控的应用程序目录。本例是Ubuntu环境的目录结构 │ ├─DetourLite // DetourLite目录 │ │ └─log │ └─Medulla // Medulla目录 │ └─log ├─run // 由Wawa启动的进程Id存在此目录
Wawa的进程监控逻辑如下:
- Wawa启动时读入配置文件,根据AutoStart参数(默认是true)判断是否启动programs目录下的程序。如须启动,则扫描programs目录(含子目录)下的可执行程序,Linux是"*.sh",Windows是"*.exe"。程序启动后将其进程Id保存到run目录下,文件格式是"{程序文件名}.pid"。
- Wawa定时扫描已启动程序,如发现程序进程退出,且不是Wawa关闭,则重启并记录日志。
appsettings.json是Wawa配置文件。
{
"Token": {
"secret": "HRwOi8vc2NoZW1hcy5",
"issuer": "logimind.com.cn",
"audience": "WebApi",
"accessExpiration": 30,
"refreshExpiration": 60
},
"Urls": "http://0.0.0.0:7100", // Web服务监听地址
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:7100"
}
}
},
"AllowedHosts": "*",
"Wawa": {
"AutoStart": true, // 自动启动被监控程序
"WatchdogScanInterval": 3 // 扫描间隔为3秒
}
}
用户可用Wawa的Web API手动启动或停止程序。Wawa会监视由其启动的程序进程。如程序进程由Wawa停止,则不会自动重启,如此可方便用户执行维护操作,比如调试程序期间手动启停程序。
图 2-1 Wawa Web API
使用浏览器输入"http://{ip}:7100/swagger/index.html"(把"{ip}"替换为Wawa所在PC的IP地址),打开wawa的swagger页面。Wawa提供了以下功能接口:
| 接口名称 | 路径 | 用途 |
|---|---|---|
| 操作系统性能 | /Top/SystemUsage | 返回Wawa所在PC的CPU占用率、内存占用率。 |
| 监控程序列表 | /Watchdog/Program | 返回programs目录下的可执行文件清单。在使用启动和停止程序接口时以此为参数。 |
| 启动程序 | /Watchdog/Start | 启动程序。如果程序已运行则忽略。 |
| 停止程序 | /Watchdog/Stop | 停止程序。如果程序已退出则忽略。成功停止程序后,Wawa删除run目录下对应的pid文件,将其移出监控队列。 |
| 进程状态 | /Watchdog/ProcessState | 返回运行中程序状态,包括其当前和峰值内存占用量(字节单位)。 |
提示:如果需要手动启停程序,记得用“停止程序”接口将其停止,以免Wawa自动重启。生产环境下,在配置调试工作结束后,应启动程序,并用“进程状态”接口复核。
2.1 Ubuntu
提示:由于Medulla所需的Mono支持Ubuntu 18 & 20,因此Wawa在这两个发行版通过测试。如果您使用Wawa监控MDCS以外程序也可以。
设安装Wawa的Ubuntu用户为"bruce"。懒书开发站的Wawa安装包区分x64和arm64架构,其中脚本均以"/home/bruce"为HOME,安装时请修改为实际使用账号目录。把Wawa安装包解压到Home目录(/home/bruce/wawa,wawa可执行程序在该目录下)。
2.1.1 Medulla启动脚本
编辑programs/Medulla/medulla.sh,这是启动Medulla的脚本,复核路径配置参数。
#!/bin/bash # MEDULLA_HOME是Medulla的安装目录 MEDULLA_HOME=/home/bruce/Wawa/programs/Medulla # mono被apt安装在/use/bin目录下,在PATH环境变量中,因此不需要指定mono的路径 # Medulla的控制台输出被重定向到medulla.out,如启动错误可查看此文件 mono $MEDULLA_HOME/Medulla.exe > $MEDULLA_HOME/log/medulla.out
把Medulla程序拷贝到programs/Medulla目录下,然后使用medulla.sh启动,以验证Medulla安装正确。
提示:Wawa的Medulla目录只有启动脚本,不包含Medulla程序。
2.1.2 DetourLite启动脚本
编辑programs/DetourLite/detour.sh,这是启动DetourLite的脚本,复核路径配置参数。
#!/bin/bash # 检查dotnet安装目录。.NET 6.0安装脚本使用~/dotnet作为安装目录, # .NET 8.0安装脚本使用~/.dotnet作为安装目录 DOTNET_HOME=/home/bruce/dotnet DETOUR_HOME=/home/bruce/wawa/programs/DetourLite $DOTNET_HOME/dotnet $DETOUR_HOME/DetourLite.dll > $DETOUR_HOME/log/detour.out
把DetourLite程序拷贝到programs/DetourLite目录下,然后使用detour.sh启动,以验证DetourLite安装正确。
2.1.3 配置Wawa服务
编辑wawa.service,检查工作目录与用户名。
[Unit] Description=Wawa is a watchdog for MDCS. After=network.target [Service] # Wawa的工作目录 WorkingDirectory=/home/bruce/wawa # 启动Wawa的命令 ExecStart=/home/bruce/wawa/wawa Restart=always RestartSec=10 Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false # 启动wawa.service的用户及其组 # Medulla & Detour可以在非root账号下运行,如果用root账号运行 # 也可以,WorkingDirectory赋予root读写权限 User=bruce Group=bruce [Install] WantedBy=multi-user.target
wawa.service复核后,使用以下指令安装到Ubuntu systemd,实现服务启动启动。
# 拷贝到systemd目录下
sudo cp wawa.service /etc/systemd/system
# 启动wawa service
sudo systemctl start wawa.service
# 如果wawa.service内容有修改,使用 sudo systemctl daemon-reload 让系统重新加载服务配置
# 检查wawa service是否正确启动
sudo systemctl status wawa.service
# Wawa启动后的状态输出如下,上半部分是Wawa服务状态,由systemd给出;下半部分是Wawa服务的控制台输出,已经绑定7100端口。
● wawa.service - Wawa is a watchdog for MDCS.
Loaded: loaded (/etc/systemd/system/wawa.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-06-20 09:13:53 CST; 1h 18min ago
Main PID: 826 (dotnet)
Tasks: 41 (limit: 4653)
CGroup: /system.slice/wawa.service
├─826 /home/bruce/wawa/wawa
├─993 /bin/bash /home/bruce/wawa/programs/Medulla/medulla.sh
├─995 mono /home/bruce/wawa/programs/Medulla/Medulla.exe
├─996 /bin/bash /home/bruce/wawa/programs/DetourLite/detour.sh
└─997 /home/bruce/dotnet/dotnet /home/bruce/wawa/programs/DetourLite/DetourLite.dll
6月 20 09:13:56 bruce-ubuntu dotnet[826]: warn: Microsoft.AspNetCore.Server.Kestrel[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]: Overriding address(es) 'http://0.0.0.0:7100'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[14]
6月 20 09:13:56 bruce-ubuntu dotnet[826]: Now listening on: http://0.0.0.0:7100
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]: Application started. Press Ctrl+C to shut down.
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]: Hosting environment: Production
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]: Content root path: /home/bruce/Playground/Wawa
# 把Wawa服务配置为随系统启动
sudo systemctl enable wawa.service
2.2 Windows
把Wawa.zip解压到"c:\mdcs\wawa"目录下。
备注:Wawa所在分区应有100G以上磁盘空间,用于存储Detour、Medulla生成的配置和日志数据。
把Detour、Medulla、Clumsy拷贝到"programs"目录下,删除"programs\DetourLite"目录。
备注:DetourLite用于Ubuntu,Detour用于Windows。
使用管理员角色启动PowerShell,如下图。
图 2-2 以管理员身份启动Power Shell
切换到Wawa目录下,使用Power Shell的"New-Service"指令,把Wawa注册到系统服务。如下图。
图 2-3 注册Wawa服务
注意:BinaryPathName应使用完整路径,本例是"c:\temp\Wawa\wawa.exe"
打开任务管理器,在服务标签中可见“Wawa看门狗”服务,点击“启动”。

