如何自动启动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.
有三个步骤,你需要在这里做:
- 创build脚本,使其可执行,并把它放在正确的地方。
- 使脚本在重新启动时正确启动。
- 奖励: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的新型操作系统。
正如在我的其他答案 ,这里有三件事你需要做:
- 创build脚本,并把它放在正确的地方。
- 使脚本在重新启动时正确启动。
- 奖励:使
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
。