# 🏥 健康守护助手 · Health Guardian v0.4
跨平台健康提醒工具,支持 Windows / macOS / Linux。
## 项目结构
```
health-guardian/
├── Cargo.toml # Workspace 根
├── config.toml # 用户配置文件
│
├── health-core/ # 纯逻辑引擎(lib)
│ └── src/
│ ├── lib.rs
│ ├── config/ # 配置加载 & 结构体
│ ├── task/ # Task / Interval / TaskStats
│ ├── state/ # 线程安全运行状态 AppState
│ ├── notifier/ # 系统通知 / 声音 / 日志
│ └── scheduler/ # 异步调度引擎
│
├── health-cli/ # 命令行入口 → hguard
│ └── src/
│ ├── main.rs # CLI 子命令 & 主流程
│ └── display.rs # 终端美化渲染(与逻辑解耦)
│
├── health-daemon/ # 后台守护进程 → hguard-daemon
│ └── src/main.rs # Unix double-fork / Windows Service
│
└── health-tray/ # 系统托盘 UI → hguard-tray
└── src/main.rs # tray-item 跨平台托盘
```
---
## 编译
### 依赖安装
```bash
# 安装 Rust(所有平台)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Linux 额外依赖
sudo apt install -y libdbus-1-dev pkg-config libasound2-dev
# AppIndicator 托盘支持(Linux)
sudo apt install -y libayatana-appindicator3-dev
```
### 编译所有 crate
```bash
cd health-guardian
cargo build --release
```
### 仅编译特定组件
```bash
cargo build --release -p health-cli # hguard
cargo build --release -p health-daemon # hguard-daemon
cargo build --release -p health-tray # hguard-tray
```
### 产物位置
```
target/release/hguard
target/release/hguard-daemon
target/release/hguard-tray
```
---
## 使用
### CLI(hguard)
```bash
# 正常启动(自动搜索 config.toml)
hguard
# 指定配置文件
hguard --config /path/to/config.toml
# 子命令
hguard list # 列出所有任务
hguard test # 立即触发所有通知(测试)
hguard log-path # 显示日志文件路径
hguard status # 显示任务状态快照
hguard --default run # 使用内置默认配置启动
hguard --verbose run # 开启详细日志
```
### 后台守护(hguard-daemon)
```bash
# 前台运行(调试)
hguard-daemon
# Unix 后台运行(double-fork)
hguard-daemon --daemonize
# 停止守护进程
kill $(cat ~/.local/share/health-guardian/hguard.pid)
```
#### systemd 用户服务(Linux)
```bash
mkdir -p ~/.config/systemd/user/
cat > ~/.config/systemd/user/hguard.service << 'EOF'
[Unit]
Description=Health Guardian Daemon
[Service]
ExecStart=/usr/local/bin/hguard-daemon
Restart=on-failure
[Install]
WantedBy=default.target
EOF
systemctl --user enable --now hguard
journalctl --user -u hguard -f
```
#### launchd(macOS)
```bash
cat > ~/Library/LaunchAgents/com.hguard.daemon.plist << 'EOF'
Label com.hguard.daemon
ProgramArguments
/usr/local/bin/hguard-daemon
RunAtLoad
KeepAlive
EOF
launchctl load ~/Library/LaunchAgents/com.hguard.daemon.plist
```
#### Windows 服务
```powershell
# 以管理员身份运行
sc.exe create hguard binPath="C:\path\to\hguard-daemon.exe" start=auto
sc.exe start hguard
```
### 托盘 UI(hguard-tray)
```bash
hguard-tray # 启动后出现托盘图标,右键显示菜单
```
---
## 配置文件
配置文件搜索顺序:
1. `--config ` 命令行指定
2. `./config.toml`(当前目录)
3. `~/.config/health-guardian/config.toml`
```toml
[settings]
log_dir = "" # 空 = 系统默认;可指定绝对路径
sound_file = "" # 空 = 内置蜂鸣;可指定 .wav/.mp3 路径
[[tasks]]
name = "补水提醒"
title = "💧 喝水时间到!"
body = "请喝一杯温水(约 200ml)。"
initial_delay_minutes = 30 # 启动后首次触发延迟(分钟)
sound = true # 是否播放声音
[tasks.interval]
unit = "minutes" # "hours" 或 "minutes"
value = 30
```
---
## 日志格式
```
════════════════════════════════════════════════════════════════════════
🚀 会话开始 2026-02-18 09:00:00
════════════════════════════════════════════════════════════════════════
[2026-02-18 09:20:00] # 1 眼部放松 👁️ 远眺放松眼睛!
[2026-02-18 09:30:00] # 1 补水提醒 💧 喝水时间到!
[2026-02-18 09:40:00] # 2 眼部放松 👁️ 远眺放松眼睛!
```
## 声音说明
| 场景 | 行为 |
|------|------|
| `sound_file = ""` | 内置合成蜂鸣:三声 × 0.5s,间隔 0.15s,频率 660 Hz |
| `sound_file = "/path/to/x.wav"` | 播放指定文件,失败自动降级为蜂鸣 |
| 任务 `sound = false` | 完全静音 |