语境:
- 我正在测试由厨师设置的 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/functions
function的调用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 已经崩溃。