php小編小新將介紹如何將DBus/Systemd設定為Systemd單元的依賴項。 DBus和Systemd是Linux作業系統中常用的兩個工具,DBus用於進程間通信,而Systemd則負責系統初始化和進程管理。將DBus和Systemd結合起來使用可以實現更有效率的系統管理和資源調度。本文將詳細說明如何在Systemd單元中設定DBus作為依賴項,以幫助您更好地理解並應用這兩個工具的使用方法。
我有一個用 go
寫的小程序,它使用 go-systemd 函式庫透過 dbus 與 systemd 互動。
程式本身註冊為 systemd 單元並應在引導時啟動。程式運行時,會定期查詢多個單元的systemd單元狀態。
現在當我手動啟動程式時,一切都很好。然而,當 systemd 重新啟動後啟動時,它將“掛起”,這意味著它將無法透過 dbus 查詢 systemd 單元狀態。我將從 go-systemd
庫收到以下訊息:
process org.freedesktop.systemd1 exited with status 1
現在,當我重新啟動程式時,它將立即能夠毫無錯誤地查詢 systemd 單元。這導致我假設我的程式存在錯誤/配置錯誤的依賴項,因此在啟動時會出現競爭條件,導致程式無法透過 dbus 與 systemd 進行通訊。
現在我已經把這個和其他幾個組合放在一起了,但它沒有幫助:
Requires=dbus.service After=dbus.service Wants=org.freedesktop.systemd1
我需要如何設定我自己的 systemd 單元(go 程式的),以便它能夠在重新啟動後立即透過 dbus 與 systemd 進行通訊?我必須配置什麼依賴項?
聽起來您的程式預設正在嘗試連接到 DBus Session 總線,因為您說手動執行它時它工作正常。當應用程式從 Systemd 啟動時,預設情況下它將以 root 身分執行,沒有可連接的會話匯流排,因此它將失敗。
當使用者在圖形終端上登入時,會話匯流排通常會在每次登入的基礎上啟動。在終端登入時預設不會啟動。
如果是這種情況,我目前可以看到您有兩個選擇:
dbus-launch
建立您的應用程式可以連接到的新匯流排。 以上是如何將 dbus/systemd 設定為 systemd 單元中的依賴項的詳細內容。更多資訊請關注PHP中文網其他相關文章!