如何自动启动 Solr?

2024-10-25 08:42:00
admin
原创
244
摘要:问题描述:目前我必须去/usr/java/apache-solr-1.4.0/example然后做:java -jar start.jar 如何让它在启动时自动启动?我在共享的 Linux 服务器上。解决方案 1:由于您使用的是共享 Linux 系统,因此您可能需要要求系统管理员执行以下操作。在 中创建启动脚...

问题描述:

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

java -jar start.jar

如何让它在启动时自动启动?

我在共享的 Linux 服务器上。


解决方案 1:

由于您使用的是共享 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——添加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 中启动(带有网络和完整GUI 的控制台)。

要手动启动 solr,请运行:

% /etc/init.d/solr start

解决方案 2:

如果您具有机器的 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

您可以将此脚本保存在某个位置(例如 $HOME)作为 start.sh。通过运行以下命令授予其全局执行权限(以简化):

$ 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 系统支持它(通常支持),这将确保您的脚本在启动时运行。

如果上面我没有错别字,那你应该可以顺利完成。让我知道进展如何。

解决方案 3:

将以下行添加到我的/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.

解决方案 4:

您需要执行三个步骤:

  1. 创建脚本,使其可执行,并将其放在正确的位置。

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

  3. 奖励:设置一个日志轮换脚本,这样日志就不会失控。

对于第一点,我已从上面调整了 supermagic 的脚本。它还不错,但有一些拼写错误,缺少一些功能(状态、重新启动),没有非常有效地使用守护进程实用程序。

这是我的脚本版本(请确保已安装守护进程以使其正常运行):

/bin/sh #!/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--verbose

    返回值=$?
    如果 [ $RETVAL = 0 ]
    然后
        回显“完成”。
    别的
        echo "失败。查看错误代码以获取更多信息。"
    菲
    返回 $RETVAL
}

停止 () {
    # 停止守护进程
    echo -n“停止 solr……”

    守护进程--stop--name = solr--verbose
    返回值=$?

    如果 [ $RETVAL = 0 ]
    然后
        回显“完成”。
    别的
        echo "失败。查看错误代码以获取更多信息。"
    菲
    返回 $RETVAL
}


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


地位 () {
    #报告守护进程的状态
    守护进程--运行--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 正在运行(通常情况下是这样的)。

解决方案 5:

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

正如我的其他回答一样,您需要在这里做三件事:

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

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

  3. 奖励:使systemd日志持久化。

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

这是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

这些文件的更多文档请参见此处。

2. 让脚本在开机时正确启动

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

一旦完成,您就可以使用以下命令启用守护进程在启动时运行:

sudo systemctl enable solr

您可以使用以下命令启动、停止、查看状态:

sudo systemctl {start|stop|status} solr

3. 使systemd日志持久化

默认情况下,systemd日志不是持久的,只要您重新启动系统,日志就会丢失。如果您不希望这样,您可以通过创建目录使它们持久:

sudo mkdir -p /var/log/journal/

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

sudo systemctl restart systemd-journald

一旦完成后,systemd的日志守护进程将接收 Solr 创建的所有 stdout 和 stderr,并将其以二进制格式存储在下/var/log/journal/

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

journalctl -u solr -f

还有一些用于进行基于日期的过滤等的标志。

3.1 调整日志文件

奖励部分!如果您想调整日志文件,您可以在此处的文档中阅读有关它的所有信息,但默认设置实际上是非常安全和合理的(默认情况下日志是压缩的,不能变得太大,速率受限,并分批写入磁盘)。

解决方案 6:

关注 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
# description: 一些描述
# 你的脚本做了什么(但不确定这是否有必要)
# 进程名称:myscript

然后你可以做

chkconfig --add myscript

解决方案 7:

查看

man 5 crontab

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

解决方案 8:

在 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 $?
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2599  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1556  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   38  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   32  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用