systemdユニットファイルのパラメータ上書き
ns-lab BBのメールサーバではマルウェア対策でamavisとclamavを利用しており、
postfixからプロセス間通信でメールをリアルタイムで投げ込む様にしていたりする。
先日メールサーバをメンテナンスしていた所、
プロセス間通信の箇所が上手く動かずデータをロストしている事がわかった。
調べてみたら、プロセス間通信用のソケットファイルがsystemdでパス強制化されており、
本来の設定が上手く反映されておらずデータ損失をしていた。
amavisやclamavの設定を変更する事も考えたが他サーバとも構成を統一したかったので、
強制上書きされたファイルの保存先を書き換えてみた。
実施した事は簡単で、”systemctl edit example”でsystemdユニットファイルを上書きするのみ。
記載する内容にコツがあり、正規のユニットファイルで保存されたデータを一度初期化してから、
上書き内容を追記する必要があった。
例えば、ListenStream・SocketUser・SocketGroupを変更する場合、
“systemctl edit example”で実行した後に次の内容を追記する必要がある。
以下サンプルはソケットの設定だが、systemdユニットファイルでも同様の事が出来る模様。
[Socket]
ListenStream=
SocketUser=
SocketGroup=
ListenStream=/var/run/example/service.sock
SocketUser=exauser
SocketGroup=exagroup
|
最初に設定を初期化をしないと、変更前のユニットファイルで設定した内容に追記する形となる。
コレに気づくまでに丸一日を溶かしてしまった… (´・ω・`)
挙動についてArch Linuxのコミュニティーにも記載があるので詳細は以下の内容も読んで欲しい。
- Arch Linux > Problem with overriding systemd services