Debian
如何用自定義版本正確替換包的服務單元文件?
我想知道如何用我自己的版本替換某個包中的服務單元文件。也就是說,我在該服務單元文件中發現了一些問題並已更正。但是,隨著該軟體包的下一次更新,我的更改將失去。
我知道我可以修改原始包,使用固定等。但在這種情況下,這似乎過於復雜,我真的很想以正常方式獲取相應包的更新。它只是我想保留在我的更正版本中的服務單元文件。
我想到了以下解決方案:
- 複製 /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/
您的更改所在的目錄。它有點時髦,很容易錯過,所以將來可能會咬你。您不能以這種方式替換東西,只能添加一些新內容,因為覆蓋已合併到單元中。(雖然不確定,這是我上次使用它之前的一段時間。)