web-dev-qa-db-ja.com

Solrを自動的に起動する方法は?

現時点では、/usr/Java/Apache-solr-1.4.0/exampleそして次に:

Java -jar start.jar

ブート時にこれを自動的に開始するにはどうすればよいですか?

共有Linuxサーバーを使用しています。

49
bluedaniel

マシンへのルートアクセスがある場合は、システムの初期化フロー(initスクリプト、systemdなど)に基づいてこれを行う方法がいくつかあります。

ただし、rootがない場合、cronにはリブート時にプログラムを実行するためのクリーンで一貫した方法があります。

まず、マシン上のJavaがどこにあるかを調べます。以下のコマンドは、それがどこにあるかを示します。

$ which Java

次に、以下のコードをシェルスクリプトに貼り付け、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

すべてが正常に機能する場合は、マシンの起動スクリプトの1つに追加する必要があります。これを行う最も簡単な方法は、次の行を/ 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システムがサポートしている場合(通常はサポートしています)、これにより、起動時にスクリプトが実行されます。

上記のタイプミスがない場合は、うまくいくはずです。それがどうなるか教えてください。

70
0xfe

共有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
76
SuperMagic

/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.
14
Daniel Rijkhof

ここで実行する必要がある3つのステップがあります。

  1. スクリプトを作成して実行可能にし、適切な場所に配置します。
  2. 再起動時にスクリプトを適切に起動します。
  3. ボーナス:ログが制御不能にならないように、ログローテーションスクリプトを設定します。

1つ目は、上からsupermagicのスクリプトを調整したことです。それは問題ありませんでしたが、いくつかのタイプミスがあり、いくつかの機能(ステータス、再起動)が欠けていて、デーモンユーティリティを非常に効果的に使用していませんでした。

これがスクリプトの私のバージョンです(動作させるために daemon がインストールされていることを確認してください):

#!/ bin/sh 
 
#前提条件:
#1. Solrを/usr/local/solr/example[.____。にインストールする必要があります。 ]#2.デーモンをインストールする必要があります
#3.スクリプトはルートによって実行する必要があります
 
#このスクリプトは、Solrを起動します。 .____。]#クラッシュ。出力は/var/log/solr/solr.logに送信されます。 pidファイルは
#が標準の場所に作成されます。
 
 start(){
 echo -n "Starting solr ..." 
 
#デーモンの開始
 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。詳細についてはエラーコードを参照してください。" 
 fi 
 return $ RETVAL 
} 
 
 stop(){
#デーモンの停止
 echo -n "solrの停止..." 
 
デーモン- stop --name = solr --verbose 
 RETVAL = $?
 
 if [$ RETVAL = 0] 
 then 
 echo "done。 「
 else 
 echo "失敗しました。詳細についてはエラーコードを参照してください。" 
 fi 
 return $ RETVAL 
} 
 
 
 restart(){
 daemon --restart --name = solr --verbose 
} 
 
 
 status(){
#デーモンのステータスに関するレポート
 daemon --running --verbose --name = solr 
 return $?
} 
 
 
 case "$ 1" in 
 start)
 start 
 ;; 
 status)
 status 
 ;; 
 stop)
 stop 
 ;; 
 restart)
 restart 
 ;; 
 *)
 echo $ "使用法:solr {start | status | stop | restart}" 
 exit 3 
 ;; 
 esac 
 
 exit $ RETVAL 

このスクリプトを/etc/init.d/solrに配置して実行可能にすると、手順1でうまくいくはずです。 /etc/init.d/solr start | stop | restart | statusを使用して、solrデーモンを開始/停止/再起動/ステータスできるようになりました。

ステップ2では、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が実行されている(通常は実行されている)と仮定して、準備ができているはずです。

12
mlissner

私はこの質問に答えました 一度 、しかしその答えはSysVを使用したオペレーティングシステムに対するもので、これは systemd をますます使用している新しいオペレーティングシステムに対するものです。

私の他の答え のように、ここで3つのことをする必要があります:

  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ログファイルの調整

ボーナスセクション!ログファイルを微調整する場合は、 ここのドキュメントですべてをお読みください を使用できますが、デフォルトは実際には非常に安全で健全です(ログはデフォルトで圧縮されており、大きくなりすぎないため、レートが制限され、バッチでディスクに書き込まれます)。

6
mlissner

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:Some description 
#スクリプトの動作(ただし、これが必要かどうかはわかりません)
#processname:myscript 
 

その後、あなたはできる

chkconfig --myscriptを追加

3
Visitor

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 $?
1
Mayank Jaiswal

チェック

man 5 crontab

@rebootは、使用しているLinuxシステムでサポートされています。

0
John La Rooy