在 Supervisor 中以非 root 使用者執行 deno 指令時,因 npm 快取權限而報錯

2 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,我是無能。
當使用 Supervisor 以非 root 權限啟動時,雖然可以用 user= 指定,但卻出錯了。
這是因為,似乎是快取方面出了問題,當 Supervisor 啟動時,環境變數仍然是 root 使用者的,所以需要傳遞環境變數,但執行指令是 deno,那麼它使用的是哪個快取呢?我發現可以用這個來確認。因為不只是 ./node_modules,當我經常使用 deno 指令時,我幾乎忘記了 deno 正在使用 npm 資產。

$ npm config get cache
/home/haturatu/.npm

然後,這個環境變數可以這樣一起傳遞:

environment=DENO_INSTALL="/home/haturatu/.deno",PATH="/home/haturatu/.deno/bin:/home/haturatu/.cargo/bin:/home/haturatu/.npm-global/bin:$PATH",HOME="/home/haturatu"

因為這是用於 deno 的 CMS。雖然不需要傳遞 cargo 的資訊,但因為我還想在其他地方使用這個環境變數設定,所以保留它。結果就像這樣:

[program:adminblog]
command=deno task lume cms --location=http://localhost:3001
user=haturatu
directory=/var/www/html/soulmining
autostart=true                        ; 在伺服器啟動時自動啟動程序
autorestart=true                      ; 當程序終止時自動重新啟動
stderr_logfile=/var/log/adminblog.err.log ; 標準錯誤日誌文件的位置
stderr_logfile_maxbytes=1MB           ; 日誌文件的最大檔案大小
stdout_logfile=/var/log/adminblog.out.log ; 標準輸出日誌文件的位置
stdout_logfile_maxbytes=1MB           ; 日誌文件的最大檔案大小
stdout_logfile_backups=0           ; 不保留過去的日誌文件
stderr_logfile_backups=0          ; 不保留過去的錯誤輸出日誌文件
environment=DENO_INSTALL="/home/haturatu/.deno",PATH="/home/haturatu/.deno/bin:/home/haturatu/.cargo/bin:/home/haturatu/.npm-global/bin:$PATH",HOME="/home/haturatu"

順帶一提,我對 directory 感到有些不妥,但這是從建立這個伺服器時就留下的痕跡,所以沒辦法。
如果正確地做,應該是 /var/www/soulmining 吧。
那麼。
下次再見了。

Related Posts