最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。
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
したら大丈夫ですよ。