iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0

寫到這裡差不多把目前專案情況建置差不多了。後面再發文只能學新的檔案類別,如.pod、.kube等,或者講一下沒有Quadlet情況下,如何把容器做成服務的。這裡就把建置過程踩到的雷講一下。

一、執行systemctl報錯:Failed to connect to bus: No medium found
執行systemctl --user daemon-reloadsystemctl --user status a2a-proxy,都報錯Failed to connect to bus: No medium found是什麼情況?

  1. 是因為先用root帳號登入,再用su - appuser切換帳號後執行systemctl --user導致。
  2. 在root帳下執行:sudo -u appuser systemctl --user ...
  3. appuser的user lingering沒開,登出後user systemd不存在,參考第四天的文章。
  4. XDG_RUNTIME_DIR環境變數沒有正確設定,可執行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的介紹有點排斥,畢竟已不像單體系統的概念了,若篇幅不足,還是要介紹一下。


上一篇
.network的Section與key
下一篇
Proxy依不同URI分流到不同的Container
系列文
Podman Quadlet-容器服務化(在單體系統到微服務之間)22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言