如何自动启动Solr?

目前我必须去/usr/java/apache-solr-1.4.0/example然后:

 java -jar start.jar 

我如何得到这个在启动时自动启动?

我在共享的Linux服务器上。

如果你有你的机器的root权限,有很多方法可以根据你系统的初始化stream程(init脚本,systemd等)

但是如果你没有root权限, cron有一个干净而一致的方式来重启后执行程序。

首先,找出你的机器上的java位置。 下面的命令会告诉你它在哪里:

 $ which java 

然后,将下面的代码粘贴到一个shell脚本中,用上面命令的pathreplace下面的javapath(/ usr / bin)。

 #!/bin/bash cd /usr/java/apache-solr-1.4.0/example /usr/bin/java -jar start.jar 

你可以把这个脚本保存在一些位置(例如$ HOME)作为start.sh。 通过运行以下命令为其提供世界执行权限(以简化):

 $ chmod og+x start.sh 

现在,testing脚本,并确保它从命令行正常工作。

 $ ./start.sh 

如果一切正常,您需要将其添加到您的机器启动脚本之一。 最简单的方法是将以下行添加到/etc/rc.local的末尾。

 # ... snip contents of rc.local ... # Start Solr upon boot. /home/somedir/start.sh 

或者,如果您没有权限编辑rc.local,则可以将其添加到您的用户crontab中。 首先在命令行中键入以下内容:

 $ crontab -e 

这将带来一个编辑器。 添加以下行:

 @reboot /home/somedir/start.sh 

如果你的Linux系统支持(通常是这样),这将确保脚本在启动时运行。

如果我没有任何错别字,它应该适合你。 让我知道如何去。

当你在一个共享的Linux机器上时,你可能需要系统pipe理员去做下面的事情。

/etc/init.d/solr创build一个启动脚本。

将此代码(我的Solr启动脚本)复制到该文件中:

 #!/bin/sh # Prerequisites: # 1. Solr needs to be installed at /usr/local/solr/example # 2. daemon needs to be installed # 3. Script needs to be executed by root # This script will launch Solr in a mode that will automatically respawn if it # crashes. Output will be sent to /var/log/solr/solr.log. A PID file will be # created in the standard location. start () { echo -n "Starting solr..." # Start daemon daemon --chdir='/usr/local/solr/example' --command "java -jar start.jar" --respawn --output=/var/log/solr/solr.log --name=solr --verbose RETVAL=$? if [ $RETVAL = 0 ] then echo "done." else echo "failed. See error code for more information." fi return $RETVAL } stop () { # Stop daemon echo -n "Stopping solr..." daemon --stop --name=solr --verbose RETVAL=$? if [ $RETVAL = 0 ] then echo "Done." else echo "Failed. See error code for more information." fi return $RETVAL } restart () { daemon --restart --name=solr --verbose } status () { # Report on the status of the daemon daemon --running --verbose --name=solr return $? } case "$1" in start) start ;; status) status ;; stop) stop ;; restart) restart ;; *) echo $"Usage: solr {start|status|stop|restart}" exit 3 ;; esac exit $RETVAL 

然后运行:

chkconfig –add solr

或者(在Ubuntu上):

update-rc.d solr默认值

…或者,如果您的Linux发行版没有chkconfig (或update-rc.d ),请将/etc/init.d/solr链接到/etc/rc3.d/S99solr/etc/rc5.d/S99solr/etc/rc3.d/K01solr/etc/rc5.d/K01solr

 % ln -s /etc/init.d/solr /etc/rc3.d/S99solr % ln -s /etc/init.d/solr /etc/rc5.d/S99solr % ln -s /etc/init.d/solr /etc/rc3.d/K01solr % ln -s /etc/init.d/solr /etc/rc5.d/K01solr 

现在重新启动Solr将启动运行级别3和5(控制台与networking和完整的GUI )。

要开始solr手动运行:

 % /etc/init.d/solr start 

/etc/init.d/solr添加到我的/etc/init.d/solr文件中,可以支持Red Hat Linux(在阅读其他人的评论之后,我将它们从/etc/init.d/mysql复制过来)。

 # Comments to support chkconfig on Red Hat Linux # chkconfig: 2345 64 36 # Description: A very fast and reliable search engine. 

有三个步骤,你需要在这里做:

  1. 创build脚本,使其可执行,并把它放在正确的地方。
  2. 使脚本在重新启动时正确启动。
  3. 奖励:build立一个logrotation脚本,这样日志不会失去控制。

第一,我从上面调整了supermagic的脚本。 这是好的,但有一些错别字,缺乏一些function(状态,重新启动),没有非常有效地使用守护程序实用程序。

这是我的脚本版本(确保你已经安装了守护进程 ):

 #!/ bin / sh的

 #先决条件:
 #1. Solr需要安装在/ usr / local / solr / example
守护进程需要安装
 #3.脚本需要由root执行

 #这个脚本将在一个模式下启动Solr,如果它会自动重新生成
 #崩溃。 输出将被发送到/var/log/solr/solr.log。 将一个pid文件 
 #在标准位置创build。

 start(){
    回声-n“开始solr ...”

     #启动守护进程
     daemon --chdir ='/ usr / local / solr / example'--command“java -jar start.jar”--respawn --output = / var / log / solr / solr.log --name = solr  - 详细

     RETVAL = $?
    如果[$ RETVAL = 0]
    然后
        回声“完成”。
    其他
        回声“失败。有关更多信息,请参阅错误代码。
    科幻
    返回$ RETVAL
 }

停止 () {
     #停止守护进程
    回声-n“停止solr ...”

    守护进程--stop --name = solr --verbose
     RETVAL = $?

    如果[$ RETVAL = 0]
    然后
        回声“完成”。
    其他
        回声“失败。有关更多信息,请参阅错误代码。
    科幻
    返回$ RETVAL
 }


重新开始 () {
    守护进程--restart --name = solr --verbose
 }


状态 () {
     #报告守护进程的状态
    守护进程 - 运行--verbose --name = solr
    返回$?
 }


在“1美元”的情况下
    开始)
        开始
     ;;
    状态)
        状态
     ;;
    停止)
        停止
     ;;
    重新开始)
        重新开始
     ;;
     *)
         echo $“用法:solr {start | status | stop | restart}”
        出口3
     ;;
 ESAC

退出$ RETVAL

把这个脚本放在/etc/init.d/solr中,使其可执行,并且在第一步中应该很好。 您现在可以使用/etc/init.d/solr start | stop | restart | status启动/停止/重新启动/pipe理solr守护进程

对于第二步,在Ubuntu机器上运行以下内容(不知道Redhat):

 update-rc.d solr defaults 

一旦完成,你的状态已经很好了,但是你可能想要在某些时候正确的旋转日志,所以这里有一个很好的日志configuration:

 /var/log/solr/*.log { weekly rotate 12 compress delaycompress create 640 root root postrotate /etc/init.d/solr restart endscript } 

将该文件放在/etc/logrotate.d/solr中,假设logrotate正在运行(通常是),那么你应该好好去。

我已经回答了这个问题,但是答案是针对使用SysV的操作系统,而这个针对越来越多地使用systemd的新型操作系统。

正如在我的其他答案 ,这里有三件事你需要做:

  1. 创build脚本,并把它放在正确的地方。
  2. 使脚本在重新启动时正确启动。
  3. 奖励:使systemd日志持久。

1.创build脚本并将其放在正确的位置

这是一个可以使用的systemd单元文件(这些文件replace了SysV init文件)。 将其命名为solr.service

 [Unit] Description=Apache Solr After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple Environment="XMX=2G" WorkingDirectory=/usr/local/solr/example ExecStart=/usr/bin/java -jar -server -Xmx${XMX} start.jar Restart=on-failure LimitNOFILE=10000 [Install] WantedBy=multi-user.target 

请注意,Solr的内存中有一个configuration。 你可能会想调整到你自己的目的。 如果你有许多variables传给systemd ,你可以使用EnvironmentFile指令来实现。

这些文件的更多文档在这里 。

2.使脚本在启动时正确启动

这很简单,但有规则。 要使其在启动时启动,请将该文件放在/etc/systemd/system/solr.service 。 你不能在这个目录中使用符号链接,不要尝试 。

一旦在那里,你可以启动守护进程在启动时运行:

 sudo systemctl enable solr 

你可以开始,停下来,

 sudo systemctl {start|stop|status} solr 

3.使systemd日志持久

默认情况下, systemd日志不是永久的,只要重启系统就会丢失。 如果这不是你想要的,你可以通过创build一个目录来使它们持久化:

 sudo mkdir -p /var/log/journal/ 

然后重新启动systemd日志logging守护程序:

 sudo systemctl restart systemd-journald 

一旦完成, systemd的日志守护进程将收到Solr创build的所有stdout和stderr,它将以二进制格式存储在/var/log/journal/

systemd处理日志的方式非常简洁,如果你不熟悉它,值得研究。 同时,只要知道要读取日志条目,就需要使用一个名为journalctl的新工具。 例如,这将跟随你的solr日志:

 journalctl -u solr -f 

而且还有标记做基于date的过滤和类似的东西。

3.1调整日志文件

奖金部分! 如果你想调整日志文件,你可以在这里的文档中看到它的全部内容 ,但是默认值实际上是非常安全和正常的(日志默认是压缩的,不能增长得太大,速度有限,写入到批量磁盘)。

按照supermagic的意见,然后按照这个

http://codingrecipes.com/service-x-does-not-support-chkconfig

他说,

 1  - 将脚本复制到/etc/init.d文件夹中
 2  -  cd /etc/init.d
 3  -  chmod + x myscript
 4  - 在#!/ bin / bash或#!/ bin / sh之后加上这些行,包括#

 #chkconfig:2345 95 20
 #描述:一些描述
 #你的脚本做什么(不知道这是否有必要)
 #processname:myscript

那你可以做

chkconfig –add myscript

在Centos 6 / Amazon Linux上testing的init.d / solr脚本。 它包装了solr的本地CLI。

 #!/bin/bash # description: Starts and stops Solr production PIDFILE=/var/run/solr.pid SOLR_HOME=/usr/share/solr START_COMMAND="$SOLR_HOME/bin/solr start -p 8984 -noprompt -m 1g" NAME="Solr" start() { echo "Starting $NAME" if [ -f $PIDFILE ]; then echo -n "$PIDFILE exists. $NAME may be running." else str=`$START_COMMAND` pid=`echo $str | grep -o "pid=[0-9]*" | grep -o "[0-9]*"` if [ "$pid" == "" ]; then echo "[FATAL ERROR] Failed to extract pid. Exiting!" exit 1 fi echo $pid > $PIDFILE fi return 0 } case "$1" in start) start ;; stop) echo "Stopping $NAME .." $SOLR_HOME/bin/solr stop rm -f $PIDFILE ;; status) $SOLR_HOME/bin/solr status ;; restart) $0 stop #sleep 2 $0 start ;; *) echo "Usage: $0 (start | stop | restart | status)" exit 1 ;; esac exit $? 

检查

 man 5 crontab 

查看您正在使用的Linux系统是否支持@reboot