为什么我不能阻止Solr跑步?

时间:2012-09-02 17:38:15

标签: ruby-on-rails-3 sunspot-rails sunspot-solr

我使用的sunspot_solr版本是1.3.3。

我使用sunspot_solr gem来启动和停止Solr的本地实例。我使用以下命令启动它:

rake sunspot:solr:start

以及以下命令来阻止它:

rake sunspot:solr:stop

然而,停止不起作用。我注意到pid文件夹中写的pid不正确。

当我开始时,我可以在ps -ef | grep 'java'命令上看到以下输出:

1000      4758  4752  0 20:32 ?        00:00:00 sh -c java -Djetty.port\=8982 -Dsolr.data.dir\=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home\=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file\=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

1000      4761  4758  7 20:32 ?        00:00:01 java -Djetty.port=8982 -Dsolr.data.dir=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

这意味着真正的服务器进程是具有pid“4761”的进程。进程“4758”仅用于在shell中启动服务器。

当我抓住pid文件时,我看到:

cat solr/pids/development/sunspot-solr-development.pid
4758

这意味着rake sunspot:solr:stop正在杀死“4758”并使“4761”启动并运行。

3 个答案:

答案 0 :(得分:3)

这是一个错误!

1000      4758  4752  0 20:32 ?        00:00:00 sh -c java -Djetty.port\=8982 -    Dsolr.data.dir\=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home\=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file\=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

1000      4761  4758  7 20:32 ?        00:00:01 java -Djetty.port=8982 -Dsolr.data.dir=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

因为进程4758是前台进程,但进程4761是后台进程,所以如果你杀死pid 4758,它不会破坏他的子进程4761,init进程将成为进程4761的父进程!

在sunspot_solr / lib / sunspot / solr / server.rb #line 103

exec(Shellwords.shelljoin(command))

Shellwords.shelljoin(command)是一个字符串,但是Kernel#exec descrip:

exec([env,] command... [,options])

如果给出单个字符串作为命令,则将其作为命令行,在执行之前进行shell扩展。标准shell在类Unix系统上始终表示“/ bin / sh”。

所以,它将开始两个过程。

使用这个: EXEC(*命令)

将开始一个过程,所以rake sunspot:solr:stop将正常工作。

see this pull request

答案 1 :(得分:1)

我已降级为'sunspot_solr', '1.3.1',现在可以正常使用。

答案 2 :(得分:-1)

像这样设置环境 - RAILS_ENV=production rake sunspot:solr:stop