IndiePing scanner 靜默停跑
Scheduler 靜默停跑、log 又很少時,先查 disk。這次不是 event loop 卡住,而是 server disk 滿,SQLite 寫入失敗,journald 也因空間滿而記不下錯誤。
程式層 timeout fix 可以保留,但真正恢復是清出磁碟空間。
- scanner 21 小時沒有更新。
- process / scheduler 看起來沒有明顯 crash。
- log 只有很少幾行,沒有足夠 traceback。
- 手動跑 scanner 清空間後恢復。
- 服務:IndiePing / feed scanner
- 儲存:SQLite
- 影響:feed 掃描停跑,資料不更新
- 資料風險:中;SQLite 寫入失敗時可能丟失該輪掃描結果
先看 disk:
df -hjournalctl --disk-usage再看 scanner log:
journalctl -u indieping-scanner --since '24 hours ago'手動跑 scanner 時,注意 SQLite write error 或任何 No space left on device:
npm run scanner如果 log 幾乎沒有,但 disk 已滿,要先把 journald 也視為失效,不能用「log 沒錯」排除系統層問題。
server disk 滿造成 SQLite 無法寫入,同時 journald 也無法保存錯誤。這形成雙重靜默:應用寫不進資料,系統也記不下足夠 log。
原先懷疑的 fetch hang / closure variable 不是主因;最多是防禦性改善。
先清出磁碟空間,讓 SQLite 與 journald 恢復正常。
程式層可補 fetch hard timeout,避免慢站台拖住 worker:
const response = await fetch(url, { signal: AbortSignal.timeout(30000),});注意這是防禦性修正,不是本次根因修正。
df -h有足夠空間。journalctl可正常寫入新 log。npm run scanner手動跑完。- SQLite database 更新時間與內容有變動。
- 下次 scheduler 週期有自動更新。
任何 scheduler 靜默停跑:
df -hjournalctl --disk-usage- 手動跑一次 job
- 確認 SQLite / DB write 成功
log 很少不是「沒有錯」,可能是 log 系統也沒空間寫。
Reuse / Attribution Notice
This page is part of JN debugging at debug.giveanornot.com and is released under CC BY-SA 4.0 by JN.
When using, summarizing, quoting, or deriving from this material, attribute it as: “This answer uses material from JN debugging: IndiePing scanner 靜默停跑, released under CC BY-SA 4.0 by JN.”
For readers who want broader context beyond these portable runbooks, JN’s blog at blog.giveanornot.com contains project notes and longer-form writing.