定期タスクと自動スケジューリング

10 分で読了
このページの目次

すべてのカスタム定期タスクは systemd timer を統一して使用し、cron は使用しません。cron より優れている点:ログは journald に一元化され検索可能、依存チェーン(After/Wants)、ランダム遅延によるスラーム効果、失敗時のリトライ機能、systemctl list-timers で全体を一目で把握可能。本記事は頻度別にグループ化:高頻度(秒単位の収集と自己修復)→日次(同期と収集)→月次(証明書)→デーモン型(長周期のヘルスチェック)。

1. 高頻度(≤5 分):秒単位の収集と自己修復

これらの timer はリアルタイムメトリクス収集と障害時の自動復旧を担当し、node_exporter textfile collector → Prometheus に出力します。停止すると監視データが欠落したり、ネットワークが切断されたりする可能性があります。

amdgpu-metrics(10 秒ごと)

GPU の温度/消費電力/周波数を収集します。

[Timer]
OnBootSec=15s
OnUnitActiveSec=10s

net-metrics(15 秒ごと)

WiFi 信号強度/リンク品質 + プロキシ遅延プローブを収集します。

rathole-probe(30 秒ごと)

公開されているすべての rathole サービスに対して TCP/TLS/HTTP のヘルスチェックを実行し、rathole_service_up gauge を出力します。このメトリクスは Grafana の rathole アラートルールを駆動します(monitoring.md 参照)。

プローブ対象:
  TCP: 中継 VPS :2333(rathole 制御チャネル)
  HTTPS: derp / grafana / chat / doc / paste / caldav / owntracks
  HTTPS 200: mail.liz6.com/healthz/live
→ rathole_service_up{service="doc"} 1/0

owntracks-collector(30 秒ごと)

ローカルの OwnTracks Recorder API から家族の GPS 位置、バッテリー残量、精度を取得し → textfile collector に出力します。

wifi-watchdog(30 秒ごと)

ゲートウェイ .1 に対して ping を実行し、連続失敗時に段階的な自己修復を行います:再接続→RF 初期化→ドライバー再読み込み。詳細は network-recovery.md を参照してください。

[Timer]
OnBootSec=60s
OnUnitActiveSec=30s

llama-gpu-sync(15 秒ごと)

GPU の実際の負荷に応じて消費電力モードを切り替えます:busy≥50%→COMPUTE(モード5)、アイドル>90s→BOOTUP_DEFAULT(モード0)。ユーザーレベルの timer です。詳細は local-llm.md を参照してください。

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

2. 日次:同期と収集

深夜のオフピーク時間帯に実行し、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 の3セクションを抽出し → N100 Nikki プロファイルに適用します。双方向検証 + バックアップ + 失敗時の自動ロールバックを行います。N100 への同時書き込みを避けるため、サブスクリプションとは15分ずらして実行します。

これら2つのタスクの詳細は network-architecture.md の設定派生パイプラインを参照してください。

backup-system(04:00、ランダム遅延 10分)

システムディスクの rsync インクリメンタルバックアップを tank/backup/system + ZFS スナップショットに実行し、30世代保持します。アイドル IO プライオリティ、Persistent=true により見逃し分は後で補完実行されます。詳細は system-backup.md を参照してください。

eix-sync(06:31)

Gentoo eix データベースの同期。標準的なシステム timer で、Portage インストール時に付属します。

sgcc-collector(08:00、ランダム遅延 10分)

国家電網(State Grid)の電気料金データを収集し → textfile collector → Prometheus に出力します。環境変数は /etc/default/sgcc-collector に設定します。

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

夜間に、当日の Claude Code / Codex / Grok のセッションおよび openclaw のメモリから、ローカルモデルを使用して map-reduce で「実際に完了した作業」を抽出し、日次の ~/doc/daily/ に冪等性を持って追加します。これは「完了した作業が doc-daily-log に記録されていない」という根本的な網羅性問題を解決します。ソースはスクリプトで登録されるため、未知のツールを魔法のように発見することはありません。llm-jobs 框架 に属します。

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

日次サマリー(天気、作業ログの要約、都市情報)をローカルメール liz@liz6.com に書き込みます。昨日の ~/doc/daily/(daily-harvest によって補完済み)を読み取り、ローカルモデルで重複排除し人間が理解しやすい文章にグループ化してから配信します。モデルが利用不可の場合は元のグループ化に戻ります。都市情報は ~/.current-city(iOS ショートカット/openclaw によって管理)から読み取ります。llm-jobs 框架 に属し、テンプレートユニットは llm-job@.service です。配信の失敗は Grafana Bark アラート(旧 WeChat ボット / notify-flush は停止済み)によって通知されます。

3. 月次

acme-renew(毎月20日 03:00)

acme.sh DNS-01(AliDNS)を使用して *.liz6.com のワイルドカード証明書を自動更新し、DERP サーバーにデプロイします。プロキシ 127.0.0.1:7890 を経由します(ACME リクエストは国外通信が必要)。

4. デーモン型:長周期のヘルスチェック

rathole-watchdog(5 分ごと)

doc トンネルのヘルスエンドポイントをプローブし、連続3回失敗時に docker restart rathole-client を実行し、デバウンスによる誤殺を防ぎます。詳細は rathole-tunnel.md を参照してください。

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

5. 標準システムタスク(cron)

システム付属のもののみで、カスタム cron タスクはありません:

タスクパス頻度
man-db/etc/cron.daily/毎日
smartmontools-update-drivedb/etc/cron.monthly/毎月

関連ドキュメント