簡體   English   中英

如何自動啟動Solr?

[英]How to start Solr automatically?

目前,我必須轉到/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-添加solr

或(在Ubuntu上):

update-rc.d solr默認值

...或者,如果您的Linux發行版沒有chkconfig (或update-rc.d ), 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

如果您具有計算機的超級用戶訪問權限,則可以根據系統的初始化流程(初始化腳本,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系統支持它(通常這樣做),這將確保您的腳本在啟動時運行。

如果我上面沒有任何錯字,它應該對您來說很好。 讓我知道事情的后續。

/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. 創建腳本,使其可執行,然后將其放在正確的位置。
  2. 使腳本在重新啟動時正確啟動。
  3. 獎勵:設置logrotation腳本,使日志不會失控。

對於第一,我從上面調整了supermagic的腳本。 沒關系,但是有很多錯別字,缺少一些功能(狀態,重新啟動),沒有非常有效地使用守護程序實用程序。

這是我的腳本版本(請確保已安裝守護程序以使其正常運行):

#!/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

將此腳本放置在/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的較新的操作系統。

就像其他答案中一樣 ,您需要在此處執行三件事:

  1. 創建腳本並將其放在正確的位置。
  2. 使腳本在重新啟動時正確啟動。
  3. 獎勵:使systemd日志持久存在。

1.創建腳本並將其放在正確的位置

這是您可以使用的systemd單位文件(這些文件替換了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內存的配置。 您可能需要根據自己的目的進行調整。 如果要傳遞給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調整日志文件

獎金部分! 如果您想調整日志文件,可以在這里的文檔中閱讀有關它的全部內容 ,但是默認值實際上是非常安全和合理的(默認情況下日志是壓縮的,不能增長太大,受速率限制,並且被編寫批量放入磁盤)。

關注supermagic的評論,然后關注此

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

他說,

1 – Copy your script into /etc/init.d folder
2 – cd /etc/init.d
3 – chmod +x myscript
4 – Add these lines, including #, right after #!/bin/bash or #!/bin/sh:

# chkconfig: 2345 95 20
# description: Some description
# What your script does (not sure if this is necessary though)
# processname: myscript

那你可以做

chkconfig-添加我的腳本

已在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

查看您所使用的Linux系統是否支持@reboot

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM