寫到這裡差不多把目前專案情況建置差不多了。後面再發文只能學新的檔案類別,如.pod、.kube等,或者講一下沒有Quadlet情況下,如何把容器做成服務的。這裡就把建置過程踩到的雷講一下。
一、執行systemctl報錯:Failed to connect to bus: No medium found
執行systemctl --user daemon-reload和systemctl --user status a2a-proxy,都報錯Failed to connect to bus: No medium found是什麼情況?
sudo -u appuser systemctl --user ...
export XDG_RUNTIME_DIR=/run/user/$(id -u)
以上是AI給我的解答,而客戶提供SIT環境給廠商操作,通常開兩個putty,用root與appuser登入,結果我在root帳號下用su - appuser切換到appuser帳號導致報錯。
二、硬碟空間LOG爆掉。
主要是/var/log硬碟空間爆掉,最後發現/var/log下的messages這個檔案長度到九位數,藉助AI提供的script指令去查到底是誰一直在寫messages檔:
sudo awk '{$1=$2=$3=$4=$5=""; print}' /var/log/messages | sort | uniq -c | sort -nr | head -30
得到結果如下:
空行: 占81226
podmanl: port 3(veth2) entered disabled state: 占37390
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflcts: 占27069
後面的#011at org.springframework.beans.factory.support開頭的訊息共12條,每條訊息出現27064次,顯然是固定印出。
這其實是.container下的[Service]的Restart設定為always造成的,原因就是Spring Boot包出image不穩定,啟動失敗由Spring Boot輸出stackstace送到給journald,而journald又藉由rsyslog寫到/var/log/messages。又被Podman Quadlet重啟,才會造成「#011at org.springframework.beans.factory.support」開頭的12條訊息完全重複27064次印出。
後來Restart改為no由手動啟動就好,不行就退版。設為on-failure也應該可以。
而在.container檔若避免錯誤堆疊寫到/var/log/messages,也可以改LogDriver,原本是LogDriver=journald,可以改成如下:
[Container]
# 略...
# 不讓 stdout/stderr 進入 journald,並限制容器 console log 大小
LogDriver=k8s-file
LogOpt=path=/home/appuser/a2a-log/auth/a2a-api-console.log
LogOpt=max-size=10mb
到UAT階段也好像只踩到上面的雷,Podman Quadlet在維運上比單體系統的雷少了些,也不吃太深的技術觀念,如k8s等。我本人是對.pod與.kube的介紹有點排斥,畢竟已不像單體系統的概念了,若篇幅不足,還是要介紹一下。