---
title: 定时任务与自动调度
url: https://doc.liz6.com/homelab/timers-and-crons
locale: zh
area: homelab
tags:
- homelab
date: 2026-07-01
modified: 2026-07-09
description: 所有自定义定时任务统一用 systemd timer,不碰 cron。比 cron 好在:日志进 journald 统一检索、依赖链(After/Wants)、随机延迟防惊群、失败重试机制、systemctl list-timers 一眼看全局。本文按频率分组:高频(秒级采集与自愈)→日度(同步与采集)→月度(证书)…
---

# 定时任务与自动调度

> 所有自定义定时任务统一用 systemd timer,不碰 cron。比 cron 好在:日志进 journald 统一检索、依赖链(After/Wants)、随机延迟防惊群、失败重试机制、`systemctl list-timers` 一眼看全局。本文按频率分组:高频(秒级采集与自愈)→日度(同步与采集)→月度(证书)→守护型(长周期健康检查)。

## 一、高频(≤5 分钟):秒级采集与自愈

这些 timer 负责实时指标采集和故障自动恢复,输出到 node_exporter textfile collector → Prometheus,挂了会丢监控数据或断网。

### amdgpu-metrics(每 10s)

采集 GPU 温度/功耗/频率。

```ini
[Timer]
OnBootSec=15s
OnUnitActiveSec=10s
```

### net-metrics(每 15s)

采集 WiFi 信号强度/链路质量 + 代理延迟探针。

### rathole-probe(每 30s)

对所有 rathole 暴露的服务做 TCP/TLS/HTTP 健康检查,输出 `rathole_service_up` gauge。这个指标驱动了 Grafana 的 rathole 告警规则(见 [monitoring.md](monitoring.md))。

```
探活目标:
  TCP: 中转 VPS :2333(rathole 控制通道)
  HTTPS: derp / grafana / chat / doc / paste / caldav / owntracks
→ rathole_service_up{service="doc"} 1/0
```

### owntracks-collector(每 30s)

从本机 OwnTracks Recorder API 拉取家庭成员 GPS 位置、电量、精度 → textfile collector。

### wifi-watchdog(每 30s)

ping 网关 `.1`,连续失败分层自愈:重连→射频重置→驱动重载。详见 [network-recovery.md](network-recovery.md)。

```ini
[Timer]
OnBootSec=60s
OnUnitActiveSec=30s
```

### llama-gpu-sync(每 15s)

按 GPU 真实负载切换功耗档:busy≥50%→COMPUTE(档5),闲置>90s→BOOTUP_DEFAULT(档0)。用户级 timer。详见 [local-llm.md](local-llm.md)。

```ini
# ~/.config/systemd/user/llama-gpu-sync.timer
[Timer]
OnBootSec=15s
OnUnitActiveSec=15s
```

## 二、日度:同步与采集

凌晨错峰执行,避免争抢 CPU/网络/N100 写入。

### sync-subscribe(03:30)

真源 mihomo config → 脱本机化消毒 → rsync 到中转 VPS,输出 `clash.yaml` + `sub.txt`(v2rayN base64),供手机漫游导入。

### sync-mihomo-to-router(03:45)

抽真源 proxies/groups/rules 三段 → N100 Nikki profile,双端校验 + 备份 + 失败自动回滚。与订阅错开 15 分钟避免同时写 N100。

> 以上两条详见 [network-architecture.md](network-architecture.md) 配置派生流水线。

### backup-system(04:00,随机延迟 10min)

系统盘 rsync 增量到 `tank/backup/system` + ZFS 快照,保留 30 份。idle IO 优先级,`Persistent=true` 错过补跑。详见 [system-backup.md](system-backup.md)。

### eix-sync(06:31)

Gentoo eix 数据库同步。标准系统 timer,Portage 安装自带。

### sgcc-collector(08:00,随机延迟 10min)

采集国网电费数据 → textfile collector → Prometheus。环境变量 `/etc/default/sgcc-collector`。

### llm-job@daily-harvest(23:50)

夜间从当天 Claude Code 会话 + openclaw 记忆里,用本地模型 map-reduce 提炼「实际完成的工作」,幂等补进当天 `~/doc/daily/`。治本"完成的事没被 `doc-daily-log` 记下"的网罗性问题。属 [llm-jobs 框架](local-llm-usage.md)。

### llm-job@daily-report(09:00)

每日汇总(天气、工作日志摘要、城市)推送到微信。读昨日 `~/doc/daily/`(已被 daily-harvest 补全),经本地模型去重分组成人话再投递;模型不可用回退原始分组。城市读 `~/.current-city`(由 iOS 捷径/openclaw 维护)。属 [llm-jobs 框架](local-llm-usage.md),模板单元 `llm-job@.service`。**取代**旧 `daily-report-weixin.timer`(已停用,脚本保留作回退)。

## 三、月度

### acme-renew(每月 20 日 03:00)

acme.sh DNS-01(AliDNS)自动续期 `*.liz6.com` 通配符证书,部署到 DERP 服务器。走代理 `127.0.0.1:7890`(ACME 请求需出国)。

## 四、守护型:长周期健康检查

### rathole-watchdog(每 5min)

探 doc 隧道健康端点,连续 3 次失败 `docker restart rathole-client`,防抖动误杀。详见 [rathole-tunnel.md](rathole-tunnel.md)。

```ini
# ~/.config/systemd/user/rathole-watchdog.timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
```

## 五、标准系统任务(cron)

仅系统自带,无自定义 cron 任务:

| 任务 | 路径 | 频率 |
|------|------|------|
| man-db | `/etc/cron.daily/` | 每日 |
| smartmontools-update-drivedb | `/etc/cron.monthly/` | 每月 |

## 相关文档

- [network-architecture.md](network-architecture.md) — 配置派生流水线 + 守护进程
- [rathole-tunnel.md](rathole-tunnel.md) — 隧道守护
- [local-llm.md](local-llm.md) — GPU 功耗调度
- [network-recovery.md](network-recovery.md) — WiFi 自愈策略
- [system-backup.md](system-backup.md) — 系统盘备份与恢复
- [monitoring.md](monitoring.md) — 监控架构(rathole-probe 指标驱动 Grafana 告警)
- [software.md](software.md) — 软件栈清单
