2015年1月26日月曜日

[CentOS 7]zabbix-agentがsystemctlコマンドで、止まらなくてハマった!


なのまるです。
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」の扱い変わったの??
何回かやっているうちに、「PidFile」指定なくても止まるようになったりする・・・よくわかんない!w

Zenback