fix(role): cron 條目改指固定路徑啟動器,升版不再靜默失效
--install-cron 原本把安裝當下的版本目錄寫進 crontab,plugin 升版、 舊版本目錄被清掉之後,排程會指向不存在的路徑而靜默停擺(cron 不回報, 此類錯誤曾造成排程長期空轉)。 - 新增 ~/.roles/bin/role_sleep_launcher.sh:crontab 只認這個固定路徑, 實際的 role_sleep.sh 於觸發當下以 sort -V 解析最新版本後 exec - 解析順序 Claude Code 端 → Codex 端,都找不到才退回安裝當下的路徑 - --remove-cron 一併清除啟動器 - --status 新增「排程指向」欄位,主動指出失效或舊式寫死路徑的條目 - SKILL.md 補上啟動器機制與轉換方式 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -395,6 +395,7 @@ node "${ROLE_DIR}/memory.js" forget --role "<角色 ID>" --dry-run
|
||||
| 時段 | 目前是否落在睡眠時段(睡眠時本來就不載入角色) |
|
||||
| 依賴 | `node` 與 `ROLE_CLI` 選到的 CLI 是否找得到 |
|
||||
| 排程 | cron 條目是否存在、cron 服務是否執行中(WSL 常未啟動 → 靠啟動時補跑) |
|
||||
| 排程指向 | 條目指到的執行檔是否還存在(舊條目寫死版本目錄時會在升版後失效,見下節) |
|
||||
|
||||
### `--install-cron`/`--remove-cron`
|
||||
|
||||
@@ -406,6 +407,25 @@ node "${ROLE_DIR}/memory.js" forget --role "<角色 ID>" --dry-run
|
||||
|
||||
安裝時會把精簡後的 `PATH`(系統基本路徑、`node` 與摘要 CLI 所在目錄)與 `ROLE_*` 變數固定寫進條目(cron 沒有互動 shell 的環境變數),並在 cron 服務未執行時警告。不得把互動 shell 的完整 `PATH` 原樣寫入,避免 crontab 因單行過長拒收。
|
||||
|
||||
#### 排程啟動器(為什麼 crontab 不直接指向 `role_sleep.sh`)
|
||||
|
||||
crontab 條目指向的是 `~/.roles/bin/role_sleep_launcher.sh`,這支啟動器由 `--install-cron` 自動產生(`--remove-cron` 會一併刪除),內容只做一件事:解析目前最新的 `role_sleep.sh` 後 `exec` 過去。
|
||||
|
||||
| 位置 | 是否含版本號 |
|
||||
| --- | --- |
|
||||
| crontab 條目 → 啟動器 | ❌ 固定路徑 |
|
||||
| 啟動器 → 實際腳本 | ✅ 觸發當下才解析 |
|
||||
|
||||
**理由**:plugin 每次升版都會產生新的版本目錄,舊目錄清掉後,寫死版本路徑的 crontab 條目就會指向不存在的檔案。cron 不會回報這種失敗,排程只是**靜默停擺**(此類錯誤曾造成排程長期空轉才被發現)。多這一層之後,升版不必重裝排程。
|
||||
|
||||
解析順序為 Claude Code 端 → Codex 端,各自取版本號最大者(`sort -V`),都找不到才退回安裝當下的路徑:
|
||||
|
||||
```bash
|
||||
ls -d "$HOME"/.claude/plugins/cache/*/jsc-generic/*/scripts/role/role_sleep.sh | sort -V | tail -n 1
|
||||
```
|
||||
|
||||
舊版安裝的排程仍是寫死路徑,`--status` 的「排程指向」欄位會標示出來,重跑一次 `--install-cron` 即可轉換。
|
||||
|
||||
---
|
||||
|
||||
## 角色檔標準格式
|
||||
|
||||
Reference in New Issue
Block a user