最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。
Zabbix-Agentをroot起動したいときに zabbix-agentd.conf の AllowRoot=1 にしただけじゃ足りず、/usr/lib/systemd/system/zabbix-agent.service で設定しているユーザー、グループを書き換える、ありますよね?
でもその方法、合ってますか?
zabbix root でググると上記のように /usr/lib/systemd/system/zabbix-agent.service を編集するというのが出てきます。
先日、Zabbix-AgentをインストールしてあったCentOS7のサーバでZabbix-AgentとZabbix-getのパッケージをアップデートしました。
アップデート後にサービスは自動的に再起動しているしよしよし、とおもった10分後、アラート発生です。
調べてみるとroot権限がないと読み込めないログファイルの監視に失敗してます。
おやぁ?とおもって ps auxf してみるとzabbix-agentdのプロセスがzabbixユーザーでの実行になってるじゃあ~りませんか。
zabbix-agentd.conf の AllowRoot は 1 のままなんだけどなぁ、とおもってたんですが、見落としていたのが冒頭のサービス設定ファイルの zabbix-agent.service です。
もしかして、パッケージのアップデートで巻き戻ったか?とおもって調べてみたらBINGO。
/usr/lib/systemd/system/zabbix-agent.serviceが更新されてました。
ここで再び /usr/lib/systemd/system/zabbix-agent.service を書き換えるとまたアップデートしたときに同じことが起きると思ったのでsystemdのサービス設定ファイルについて調べてみました。
RedHatのサイトによるとサービス設定ファイルの読み込み順には優先度があると。
| ディレクトリ | 説明 |
|---|---|
/usr/lib/systemd/system/ |
インストール済みの RPM パッケージで配布された systemd のユニットファイル。 |
/run/systemd/system/ |
ランタイム時に作成された systemd ユニットファイル。 このディレクトリーは、インストール済みのサービスのユニットファイルのディレクトリーよりも優先されます。 |
/etc/systemd/system/ |
systemctl enable で作成された systemd ユニットファイル、およびサービス拡張向けに追加されたユニットファイル。このディレクトリーは、runtime のユニットファイルのディレクトリーよりも優先されます。 |
以上の3箇所にサービス設定ファイルが配置されているわけです。
上の表の下から順に優先度が高いわけなので、/usr/lib/systemd/system/の中にあるものがパッケージで更新されてもいいようにするには、/etc/systemd/system/にサービス設定ファイルをコピーして編集する、というのがベストプラクティスかなと。
なので、今回のZabbix-Agentの場合、
|
1 2 3 4 5 6 7 8 |
# cp -i /usr/lib/systemd/system/zabbix-agent.service /etc/systemd/system # vi /etc/systemd/system/zabbix-agent.service > User=root > Group=root # systemctl daemon-reload # systemctl restart zabbix-agent |
となります。
忘れちゃいけないのが、 systemctl daemon-reload です。
これをせずに systemctl restart だけやっても変わらないです。
もし、元のように /usr/lib/systemd/system 以下のもので設定する、ということになれば、コピーした /etc/systemd/system 以下の設定ファイルを削除してから systemctl daemon-reload したら大丈夫ですよ。