同じシステムユニットをマスクして継承します。

同じシステムユニットをマスクして継承します。

特定のイベント(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実行すると、最終的なビルドサービス定義のすべての部分を一度に表示することができます。

関連情報