develop
master
clis=0
PATH
/usr/bin
/bin
排程條目的環境快照清單補上 PATH。
版號 0.2.4 到 0.2.5。
偵測 CLI 那一支在有人的 shell 裡回五支,在 cron 裡回零支,而且結束碼是 0。它不是失敗,是成功地回報了「什麼都沒有」。輸出看起來像「這台機器沒裝 CLI」,實際上是 PATH 上找不到——兩件事在報告上長得一模一樣。
另一條路是讓偵測那一支自己去找常見安裝路徑。那要維護一份路徑清單,而清單會過期,過期的方式跟先前修掉的那幾個一模一樣:寫死的一份靜態名單,環境變了沒有人會知道。
條目本來就快照十個環境變數。多這一個,等於把「這台機器的執行檔裝在哪」交給安裝當下的環境回答。
界線講明:巡檢那一輪要跑的指令本身走的是字面絕對路徑、不靠 PATH;靠 PATH 的是那幾支腳本自己呼叫的外部程式。
這件事是被正確擋下來的,不是釀成事故才發現的。執行那一支的規則是「代不出目標不算失敗」,所以那一筆的執行紀錄與失敗次數一個字都沒動。要是當初寫成「代不出來就記失敗」,那個計數現在已經在往上爬,而且沒有人修得動——因為問題不在那一筆。
同一輪另一筆沒有代入點的內建項正常跑完、回 0、算出下次到期。機制是通的,缺的只是這一個變數。
三支檢核腳本都回結束碼 0,全程用乾跑。
條目的環境快照是安裝當下拍的,所以部署完要重跑一次 schedule.sh install patrol,那條 PATH 才進得了條目。
schedule.sh install patrol
cron 給的 PATH 只有 /usr/bin 與 /bin,而這台機器的 CLI 執行檔裝在家目錄底下。 於是無人值守那一輪偵測 CLI 一支都找不到——而且是回結束碼 0 加一份空清單, 不是失敗。看起來像「這台機器沒裝 CLI」,實際上是 PATH 上找不到。 實測踩到:那一輪印出 clis=0,帶 CLI 代入點的內建項全部代不出目標而被擋下, 同一支腳本在有人的 shell 裡回五支。 修在條目這一層,不是讓偵測那一支自己去猜安裝路徑:猜就要維護一份常見路徑 清單,而清單會過期,過期的方式跟今天修掉的那幾個一模一樣。條目本來就快照 十個環境變數,多這一個等於把「這台機器的執行檔裝在哪」交給安裝當下的環境 回答,不必任何人維護。 巡檢那一輪要跑的指令本身走的是字面絕對路徑、不靠 PATH;靠 PATH 的是那幾支 腳本自己呼叫的外部程式,所以這一條補的是後者。 實測:拿條目會帶的那條 PATH 在清空環境裡跑,五支 CLI 全解得出來;對照組用 cron 預設的 PATH,零支。 三份 manifest 版號 0.2.4 升到 0.2.5。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reviewed-on: #30
No dependencies set.
The note is not visible to the blocked user.
摘要
clis=0——帶 CLI 代入點的那幾筆全部代不出目標。根因是 cron 給的PATH只有/usr/bin與/bin,而這台機器的 CLI 執行檔裝在家目錄底下。這一批的內容
排程條目的環境快照清單補上
PATH。版號 0.2.4 到 0.2.5。
這一類又出現一次
偵測 CLI 那一支在有人的 shell 裡回五支,在 cron 裡回零支,而且結束碼是 0。它不是失敗,是成功地回報了「什麼都沒有」。輸出看起來像「這台機器沒裝 CLI」,實際上是
PATH上找不到——兩件事在報告上長得一模一樣。為什麼修在條目這一層
另一條路是讓偵測那一支自己去找常見安裝路徑。那要維護一份路徑清單,而清單會過期,過期的方式跟先前修掉的那幾個一模一樣:寫死的一份靜態名單,環境變了沒有人會知道。
條目本來就快照十個環境變數。多這一個,等於把「這台機器的執行檔裝在哪」交給安裝當下的環境回答。
界線講明:巡檢那一輪要跑的指令本身走的是字面絕對路徑、不靠
PATH;靠PATH的是那幾支腳本自己呼叫的外部程式。那一輪本身沒有壞
這件事是被正確擋下來的,不是釀成事故才發現的。執行那一支的規則是「代不出目標不算失敗」,所以那一筆的執行紀錄與失敗次數一個字都沒動。要是當初寫成「代不出來就記失敗」,那個計數現在已經在往上爬,而且沒有人修得動——因為問題不在那一筆。
同一輪另一筆沒有代入點的內建項正常跑完、回 0、算出下次到期。機制是通的,缺的只是這一個變數。
測試結果
PATH,其餘環境清空PATH,其餘環境清空三支檢核腳本都回結束碼 0,全程用乾跑。
部署之後還要多做一步
條目的環境快照是安裝當下拍的,所以部署完要重跑一次
schedule.sh install patrol,那條PATH才進得了條目。前置 Push Request