目前我必须去/usr/java/apache-solr-1.4.0/example
然后做:
java -jar start.jar
如何让它在启动时自动启动?
我在一个共享的 Linux 服务器上。
当您在共享 Linux 机器上时,您可能必须要求系统管理员执行以下操作。
在/etc/init.d/solr
.
将此代码(我的 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
(or update-rc.d
),则链接/etc/init.d/solr
到/etc/rc3.d/S99solr
and/etc/rc5.d/S99solr
和/etc/rc3.d/K01solr
and /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 中启动(带有网络和完整GUI的控制台)。
要手动启动 solr,请运行:
% /etc/init.d/solr start
如果您对您的机器具有 root 访问权限,则可以根据系统的初始化流程(init 脚本、systemd 等)有多种方法来执行此操作。
但是,如果您没有 root,cron
则可以在重新启动时以干净且一致的方式执行程序。
首先,找出 java 在您的机器上的位置。下面的命令会告诉你它在哪里:
$ which java
然后,将以下代码粘贴到 shell 脚本中,将下面的 java 路径 (/usr/bin) 替换为您从上述命令中获得的路径。
#!/bin/bash
cd /usr/java/apache-solr-1.4.0/example
/usr/bin/java -jar start.jar
您可以将此脚本作为 start.sh 保存在某个位置(例如,$HOME)。通过运行以下命令为其授予世界执行权限(以简化):
$ chmod og+x start.sh
现在,测试脚本并确保它在命令行中正常工作。
$ ./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 系统支持它(通常支持),这将确保您的脚本在启动时运行。
如果我上面没有任何错别字,它应该适合你。让我知道事情的后续。
将以下行添加到我的文件中以支持 Red Hat Linux(我在这里阅读了其他人的评论后/etc/init.d/solr
复制了它们)。/etc/init.d/mysql
# Comments to support chkconfig on Red Hat Linux
# chkconfig: 2345 64 36
# Description: A very fast and reliable search engine.
您需要在此处执行三个步骤:
对于第一,我已经从上面调整了 supermagic 的脚本。没问题,但是有一些拼写错误,缺少一些功能(状态,重新启动),没有非常有效地使用守护程序实用程序。
这是我的脚本版本(确保您安装了守护程序以使其工作):
#!/bin/sh # 先决条件: # 1. Solr需要安装在/usr/local/solr/example # 2. 需要安装守护进程 # 3.脚本需要root执行 # 此脚本将以一种模式启动 Solr,如果它会自动重生 # 崩溃。输出将被发送到 /var/log/solr/solr.log。一个pid文件将是 # 在标准位置创建。 开始 () { echo -n "正在启动 solr..." # 启动守护进程 守护进程 --chdir='/usr/local/solr/example' --command "java -jar start.jar" --respawn --output=/var/log/solr/solr.log --name=solr --冗长的 RETVAL=$? 如果 [ $RETVAL = 0 ] 然后 回声“完成”。 别的 回声“失败。有关更多信息,请参阅错误代码。” 菲 返回 $RETVAL } 停止 () { # 停止守护进程 echo -n "正在停止 solr..." 守护进程 --stop --name=solr --verbose RETVAL=$? 如果 [ $RETVAL = 0 ] 然后 回声“完成”。 别的 回声“失败。有关更多信息,请参阅错误代码。” 菲 返回 $RETVAL } 重新开始 () { 守护进程 --restart --name=solr --verbose } 地位 () { # 报告守护进程的状态 守护进程 --running --verbose --name=solr 返回$? } 案例“$1”在 开始) 开始 ;; 地位) 地位 ;; 停止) 停止 ;; 重新开始) 重新开始 ;; *) echo $"用法:solr {start|status|stop|restart}" 3号出口 ;; 经社理事会 退出 $RETVAL
将此脚本放在 /etc/init.d/solr 中,使其可执行,您应该对第一步很好。您现在可以使用 /etc/init.d/solr start|stop|restart|status 启动/停止/重新启动/状态 solr 守护进程
对于第二步,在 Ubuntu 机器上运行以下命令(不了解 Redhat):
update-rc.d solr defaults
完成此操作后,您的状态就很好了,但您可能希望在某个时候正确地旋转日志,所以这里有一个很好的日志配置:
/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的较新操作系统。
与我的其他答案一样,您需要在这里做三件事:
systemd
日志持久化。这systemd
是您可以使用的单元文件(这些替换 SysV 初始化文件)。命名它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 的内存中有一个配置。您可能希望根据自己的目的对其进行调整。如果您有许多要传递给的变量systemd
,则可以使用该EnvironmentFile
指令执行此操作。
这很简单,但是有规则。要使其在启动时启动,请将文件放入/etc/systemd/system/solr.service
. 您不能在此目录中使用符号链接,请勿尝试.
一旦在那里,您可以启用守护程序在启动时运行:
sudo systemctl enable solr
您可以通过以下方式启动、停止和状态:
sudo systemctl {start|stop|status} solr
systemd
日志持久化默认情况下,systemd
日志不是持久的,并且在您重新启动系统时它们会丢失。如果这不是您想要的,您可以通过创建一个目录使它们持久化:
sudo mkdir -p /var/log/journal/
然后重新启动systemd
日志守护进程:
sudo systemctl restart systemd-journald
一旦完成,systemd
的日志守护进程将接收 Solr 创建的所有标准输出和标准错误,并将以二进制格式存储在/var/log/journal/
.
处理日志的方式systemd
非常简洁,如果您不熟悉它,值得研究。同时,只要知道要阅读您的日志条目,您需要使用一个名为journalctl
. 例如,这将遵循您的 solr 日志:
journalctl -u solr -f
还有一些标志用于进行基于日期的过滤和类似的事情。
奖金部分!如果您想调整日志文件,您可以在此处的文档中阅读有关它的所有内容,但默认设置实际上非常安全和健全(默认情况下日志是压缩的,不能变得太大,速率受限,并且写入批量到磁盘)。
关注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 # 描述:一些描述 # 你的脚本做了什么(虽然不确定这是否必要) # 进程名:myscript
然后你可以做
chkconfig --add myscript
在 Centos 6/Amazon Linux 上测试的 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
查看@reboot
您使用的 Linux 系统是否支持。