2

语境:

  • 我正在测试由厨师设置的 elasticsearch 1.7.1 配置,并在厨房进行测试
  • 厨师脚本和配置有效,因为它以某种方式在生产中运行
  • 以 elasticsearch 用户身份运行service elasticsearch start失败,但它委托给的实际调用不会。

据我所知,厨师脚本以 root 身份运行。因此,当测试失败时(它通过 running 来检查 elasticsearch 是否正在运行service elasticsearch status),我登录到 vagrant 机器。作为 root ,如果我运行service elasticsearch start,我得到一个 OK (这是不正确的,但另一个问题),然后运行一个后续service elasticsearch status,我遇到了错误:elasticsearch dead but pid file exists

进一步挖掘,我在运行的 init.d 脚本上设置了调试语句,service发现实际命令基本上是对init.d/functionsfunction的调用daemon,它只是调用:

runuser -s /bin/bash elasticsearch -c 'ulimit -S -c 0 >/dev/null 2>&1 ; /usr/share/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch/elasticsearch.pid -d -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch/ -Des.default.path.data=/data/elasticsearch/data/ -Des.default.path.work=/tmp/elasticsearch -Des.default.path.conf=/etc/elasticsearch/'

所以我尝试了一个sudo su - elasticsearch然后在引号中运行该部分:

[elasticsearch@default-centos ~]$ ulimit -S -c 0 >/dev/null 2>&1 ; 
/usr/share/elasticsearch/bin/elasticsearch 
-p /var/run/elasticsearch/elasticsearch.pid -d 
-Des.default.path.home=/usr/share/elasticsearch 
-Des.default.path.logs=/var/log/elasticsearch/ 
-Des.default.path.data=/data/elasticsearch/data/ 
-Des.default.path.work=/tmp/elasticsearch 
-Des.default.path.conf=/etc/elasticsearch/

随后service elasticsearch status显示 elasticsearch 运行良好!我什至将日志记录设置为 TRACE,并且没有迹象表明 elasticsearch 已经崩溃。

4

0 回答 0