2012-09-02 70 views
1

我使用的sunspot_solr版本是1.3.3。爲什麼我不能阻止Solr運行?

我正在使用sunspot_solr gem來啓動和停止本地Solr實例。我用下面的命令來啓動它:

rake sunspot:solr:start 

和下面的命令停止:

rake sunspot:solr:stop 

然而,停止不工作。我注意到在pids文件夾中寫入的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」僅用於啓動外殼中的服務器。

當我的貓pid文件我看到:

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

這意味着rake sunspot:solr:stop是殺害「4758」,並留下「4761」啓動和運行。

回答

1

我已降級爲'sunspot_solr', '1.3.1',現在可以正常工作。

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 /太陽黑子/ solr的/ server.rb#行
exec(Shellwords.shelljoin(command)) 

Shellwords.shelljoin(命令)是一個字符串,但Kernel#exec記述:

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

如果單個串是作爲命令給出的,它被視爲一個命令行,在被執行之前會受到shell的擴展。標準shell在類Unix系統上總是表示「/ bin/sh」。

所以,它會啓動兩個進程。

使用本: EXEC(*命令)

將啓動一個過程,所以耙太陽黑子:Solr的:停止將工作正確的。

see this pull request

-1

集ENV這樣的 - RAILS_ENV=production rake sunspot:solr:stop