Debian

如何用自定義版本正確替換包的服務單元文件?

  • March 27, 2020

我想知道如何用我自己的版本替換某個包中的服務單元文件。也就是說,我在該服務單元文件中發現了一些問題並已更正。但是,隨著該軟體包的下一次更新,我的更改將失去。

我知道我可以修改原始包,使用固定等。但在這種情況下,這似乎過於復雜,我真的很想以正常方式獲取相應包的更新。它只是我想保留在我的更正版本中的服務單元文件。

我想到了以下解決方案:

  • 複製 /lib/systemd/system/daemon.service 到 /etc/systemd/system/my-daemon.service
  • 禁用並屏蔽daemon.service 以便 systemd 不再啟動它,並且希望包更新不會重新啟用它
  • 在 my-daemon.service 中進行適當的更正
  • 啟用 my-daemon.service

這會是一個合理的方法嗎?這個問題有“官方”解決方案嗎?

預設情況下,systemd 將使用來自/usr/lib/systemd/system/daemon.service. 但是,如果它在 中找到服務單元/etc/systemd/system/daemon.service,它會自動使用該單元並忽略預設的單元。

所以基本上

cp /usr/lib/systemd/system/daemon.service /etc/systemd/system/daemon.service

並在文件中進行所需的任何更改/etc/systemd/system/daemon.service

替代方法:

如果您不喜歡這個或只需要一些小的編輯,您可以在systemctl edit daemon.service那裡執行並進行更改。這些更改將合併到 systemd 將嘗試執行的服務單元,無論該單元是否位於/usr/lib/...or下/etc/...

優點:

如果軟體包提供的單元文件得到更新,這些更改將自動與您的調整合併。

缺點:

如果軟體包提供的單元文件得到更新,這些更改將自動與您的調整合併。(不開玩笑。有時,你真的不想要這個。)

這很醜 - systemd 創建/etc/systemd/system/daemon.overrides.d/您的更改所在的目錄。它有點時髦,很容易錯過,所以將來可能會咬你。

您不能以這種方式替換東西,只能添加一些新內容,因為覆蓋已合併到單元中。(雖然不確定,這是我上次使用它之前的一段時間。)

引用自:https://unix.stackexchange.com/questions/575157