釋出:條目只帶放得下 CLI 執行檔的那幾個目錄,不快照整條 PATH #33

Merged
admin merged 2 commits from develop into master 2026-09-04 09:24:51 +00:00
Member

摘要

  • 需求描述:把 develop 累積的變更釋出到 master。上一版把整條 PATH 快照進排程條目,實測裝不起來——crontab 一行有長度上限,回的是 command too long、結束碼 4。這一批改成只帶放得下 CLI 執行檔的那幾個目錄。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

為什麼這一張急

這台機器目前跑的短 PATH 條目,是拿工作目錄版本裝上去的。正式版本還停在裝不起來的那一版,所以下次有人重裝排程就會退回長 PATH,又會撞上同一個長度上限。

版號 0.2.5 到 0.2.6。

三個數字

做法 長度
整條 PATH 照抄 2160 字元 → 裝不起來
去重、再去掉不存在的那幾段 1332 字元 → 仍然超過
只帶放得下 CLI 執行檔的目錄 70 字元,整行降到 685

去重與去死路徑都不夠。這台機器的 PATH 有 61 段,光是還活著又不重複的就 38 段。

為什麼只帶那幾個目錄就夠

這一條要解決的問題很窄:cron 只給 /usr/bin 與 /bin,而偵測 CLI 那一支靠 PATH 找執行檔,找不到就回結束碼 0 加一份空清單——看起來像「這台機器沒裝 CLI」。

巡檢要跑的指令本身走的是字面絕對路徑,不靠這一條。靠它的只有那幾支腳本自己呼叫的外部程式。

收尾接上 cron 本來就會給的兩段,免得只剩自訂目錄而找不到系統工具。

一個代價,寫進註解

有些 CLI 裝在會過期的目錄底下——這台機器上就有一支落在帶行程編號的多殼層目錄裡,那種路徑下一次開機就不在了。這裡不特別過濾:過濾要認得每一種安裝方式,而那份名單會過期得比路徑還快。重跑一次 install 就重新拍一份,而條目本來就是安裝當下的快照。

這個坑是怎麼發現的

不是靠測試,是靠真的裝一次。乾跑不會踩到——長度上限是 crontab 自己檢查的,乾跑根本不呼叫它。上一版的測試每一項都過,因為每一項都繞過了會失敗的那一步。

已經在這台機器上驗過的結果

裝上短 PATH 之後那一輪的執行結果,三種結局同時出現:

  • 成功:jsc-sdlc:implement 跑 sdlc-gate.sh wp-report,下次到期算出來了。
  • 失敗:jsc-hooks:hooks-install 五個 CLI 目標裡有一支回非零,失敗次數加一。那是機器上真實的接線問題,正是這一筆內建項存在的理由;而五個目標裡四個過、一個沒過就整筆算失敗,所以那一支不會被另外四支蓋掉。
  • 代不出目標:jsc-pkg:pkg-update 的執行紀錄與失敗次數一個字都沒動。

上一輪同一批是「跑 1 筆、代不出目標 2 筆」,clis=0。

測試結果

  • 拿條目會帶的那條 PATH 在清空環境裡跑,五支 CLI 全解得出來。
  • 真的裝一次:結束碼 0,服務在跑,連結檢查通過,自我檢核零誤報。
  • 三支檢核腳本都回結束碼 0。
  • 上一版失敗那一次沒有弄壞任何東西:寫入失敗時什麼都沒動,舊條目完好。

前置 Push Request

  • 無
## 摘要 - 需求描述:把 develop 累積的變更釋出到 master。上一版把整條 `PATH` 快照進排程條目,實測裝不起來——crontab 一行有長度上限,回的是 `command too long`、結束碼 4。這一批改成只帶放得下 CLI 執行檔的那幾個目錄。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 ## 為什麼這一張急 這台機器目前跑的短 `PATH` 條目,是拿工作目錄版本裝上去的。**正式版本還停在裝不起來的那一版**,所以下次有人重裝排程就會退回長 `PATH`,又會撞上同一個長度上限。 版號 0.2.5 到 0.2.6。 ## 三個數字 | 做法 | 長度 | | --- | --- | | 整條 `PATH` 照抄 | 2160 字元 → 裝不起來 | | 去重、再去掉不存在的那幾段 | 1332 字元 → 仍然超過 | | **只帶放得下 CLI 執行檔的目錄** | **70 字元**,整行降到 685 | 去重與去死路徑都不夠。這台機器的 `PATH` 有 61 段,光是還活著又不重複的就 38 段。 ## 為什麼只帶那幾個目錄就夠 這一條要解決的問題很窄:cron 只給 `/usr/bin` 與 `/bin`,而偵測 CLI 那一支靠 `PATH` 找執行檔,找不到就回結束碼 0 加一份空清單——看起來像「這台機器沒裝 CLI」。 巡檢要跑的指令本身走的是字面絕對路徑,不靠這一條。靠它的只有那幾支腳本自己呼叫的外部程式。 收尾接上 cron 本來就會給的兩段,免得只剩自訂目錄而找不到系統工具。 ## 一個代價,寫進註解 有些 CLI 裝在會過期的目錄底下——這台機器上就有一支落在帶行程編號的多殼層目錄裡,那種路徑下一次開機就不在了。這裡不特別過濾:過濾要認得每一種安裝方式,而那份名單會過期得比路徑還快。重跑一次 `install` 就重新拍一份,而條目本來就是安裝當下的快照。 ## 這個坑是怎麼發現的 不是靠測試,是靠真的裝一次。乾跑不會踩到——長度上限是 `crontab` 自己檢查的,乾跑根本不呼叫它。**上一版的測試每一項都過,因為每一項都繞過了會失敗的那一步。** ## 已經在這台機器上驗過的結果 裝上短 `PATH` 之後那一輪的執行結果,三種結局同時出現: - 成功:`jsc-sdlc:implement` 跑 `sdlc-gate.sh wp-report`,下次到期算出來了。 - 失敗:`jsc-hooks:hooks-install` 五個 CLI 目標裡有一支回非零,失敗次數加一。那是機器上真實的接線問題,正是這一筆內建項存在的理由;而五個目標裡四個過、一個沒過就整筆算失敗,所以那一支不會被另外四支蓋掉。 - 代不出目標:`jsc-pkg:pkg-update` 的執行紀錄與失敗次數一個字都沒動。 上一輪同一批是「跑 1 筆、代不出目標 2 筆」,`clis=0`。 ## 測試結果 - 拿條目會帶的那條 `PATH` 在清空環境裡跑,五支 CLI 全解得出來。 - 真的裝一次:結束碼 0,服務在跑,連結檢查通過,自我檢核零誤報。 - 三支檢核腳本都回結束碼 0。 - 上一版失敗那一次沒有弄壞任何東西:寫入失敗時什麼都沒動,舊條目完好。 ## 前置 Push Request - 無
jiantw83 added 2 commits 2026-09-04 09:23:28 +00:00
上一版把整條 PATH 快照進條目,實測直接裝不起來:crontab 一行有長度上限,
回的是 command too long,結束碼 4。這台機器的 PATH 是 2160 字元,去重又去掉
不存在的那幾段之後還有 1332 字元,仍然超過。

改成只帶放得下 CLI 執行檔的那幾個目錄,這台機器實測兩個、合起來 70 字元,
整行降到 685 字元。夠用的理由是這一條要解決的問題很窄:cron 只給 /usr/bin
與 /bin,而偵測 CLI 那一支靠 PATH 找執行檔,找不到就回結束碼 0 加一份空清單
——看起來像「這台機器沒裝 CLI」。巡檢要跑的指令本身走字面絕對路徑,不靠它。

收尾接上 cron 本來就會給的那兩段,免得只剩自訂目錄而找不到系統工具。

一個代價寫進註解:有些 CLI 裝在會過期的目錄底下,例如帶行程編號的多殼層
目錄,那種路徑下一次開機就不在了。不特別過濾——過濾要認得每一種安裝方式,
那份名單會過期得比路徑還快。重跑一次 install 就重新拍一份,而條目本來就是
安裝當下的快照。

實測:拿條目會帶的那條 PATH 在清空環境裡跑,五支 CLI 全解得出來;真的裝一次
回結束碼 0,服務在跑,連結檢查通過。

三份 manifest 版號 0.2.5 升到 0.2.6。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reviewed-on: #32
admin approved these changes 2026-09-04 09:24:48 +00:00
admin merged commit 78116a61f1 into master 2026-09-04 09:24:51 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/assist#33