特定のイベント(whatever.socketを含む)が原因でデーモンが特定の構成で始まるように、パッケージがeverything.serviceファイルを提供するとします。
この機能を完全に無効にしたいです。特に、このサービスを名前で参照できる以前のソケットや他のすべてのデバイスファイルがデーモンを起動できないようにしたいと思います。
代わりに、別の.socketユニットとは異なる環境変数を使用して、このデーモン用の独自のユニットファイルを作成したいと思います。また、元のユニットファイルの可能なアップストリーム更新を自動的に考慮するようにオーバーライドしたいと思います(残念ながら、everything.serviceをeverything-modified.serviceにコピーして編集する現在のソリューションではこれを提供しません)。
次のシンボリックリンクとファイルを作成する場合:
/etc/systemd/system/whatever.service → /dev/null
/etc/systemd/system/whatever-modified.service → /usr/lib/systemd/system/whatever.service
/ etc/systemd/system/whatever-modified.service.d/fix.conf
systemdは新しいサービスもブロックされていると見なし、起動を拒否します。この状況を避ける方法は?
答え1
1つを作成すると、/etc/systemd/system/whatever.service
その項目はすでに自動的に完全に上書きされます/usr/lib/systemd/system/whatever.service
。シンボリックリンク/dev/null
はそのうちの特別なケースに過ぎません。
/usr/lib/systemd/system/whatever.service
将来の更新の可能性を考慮して、既存のコンテンツの一部のみを上書きするには、/etc/systemd/system/whatever.service.d/fix.conf
上書き/追加を使用して作成できます。存在しない/usr/lib/systemd/system/whatever.service
場合は/etc/systemd/system/whatever.service
自動的に適用されます。
いくつかの設定(例:複数回表示される場合があります)に注意してください。別の行を追加する代わりにExecStart=
既存の行を上書きするには、次のようにする必要があります。ExecStart=
fix.conf
[Service]
ExecStart=
ExecStart=/your/custom/command
最初の空ExecStart=
行はsystemdに「新しいパラメータを追加するのではなく、元のExecStartパラメータを削除したい」と伝えます。
もちろん、ファイルやディレクトリ、またはその内容をsystemctl daemon-reload
変更した後は常に実行する必要があることに注意してください。それ以外の場合、変更は適用されません。.service
.service.d
systemctl cat whatever.service
実行すると、最終的なビルドサービス定義のすべての部分を一度に表示することができます。