なのまるです。
CentOS7のサーバーをセットアップしていたらハマったので、メモです!
もくじ
状況
/var/log/zabbix/zabbix_agentd.log にこんなログが出ていて、プロセスが止まらないzabbix_agentd [20982]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable zabbix_agentd [29317]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable zabbix_agentd [12198]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable zabbix_agentd [17390]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable zabbix_agentd [27464]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable zabbix_agentd [27564]: Is this process already running? Could not lock PID file [/tmp/zabbix_agentd.pid]: [11] Resource temporarily unavailable
調査
原因がわからないし、「/tmp/zabbix_agentd.pid」も出来ている・・・。何かがおかしい。他のサーバーから持ってきたconfを使っているからか?https://github.com/zabbix/zabbix/blob/trunk/src/zabbix_agent/zabbix_agentd.c、Cのソースコード読めないけど見てみたら、「configのPidFileがnullだったら"/tmp/zabbix_agentd.pid"にする」みたいなこと書いてある。
CentOS7で?なのか自分の環境だけでなのかわからないが、「/tmp」の挙動がおかしいらしい・・・
ちなみにこの環境はSELinuxが無効になっていた。
/usr/lib/systemd/system/zabbix-agent.service
[Unit] Description=Zabbix Agent After=syslog.target After=network.target [Service] Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf" EnvironmentFile=-/etc/sysconfig/zabbix-agent Type=forking Restart=always PIDFile=/run/zabbix/zabbix_agentd.pid KillMode=process ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE ~略~
zabbix-agent.serviceには、こんな風に書かれているけどどうやら読んでないらしい・・・
デフォルトの/etc/zabbix/zabbix_agentd.confの中には指定してある
### Option: PidFile # Name of PID file. # # Mandatory: no # Default: # PidFile=/tmp/zabbix_agentd.pid PidFile=/var/run/zabbix/zabbix_agentd.pidけど、今回はほかのサーバーからコピーしたものを使用して「PidFile」は指定していなかった。。。
まとめ
- CentOS7に他のサーバーから持ってきた、confを適用するときは十分に気をつけなくてはいけない!
- そもそも、「/usr/lib/systemd/system/zabbix-agent.service」に書いてある意味って何?
書いてあるなら読んで!って思ったけど、Cのコード修正方法わからないからpull req出せない・・・orz - CentOS7で「/tmp」の扱い変わったの??