51

現時点では、次の場所に移動して実行する必要が/usr/java/apache-solr-1.4.0/exampleあります。

java -jar start.jar

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

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

4

8 に答える 8

77

共有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.dsolrのデフォルト

chkconfig...または、Linuxディストリビューションに(または)がない場合は、andおよびandupdate-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
于 2010-01-27T22:44:31.337 に答える
70

マシンへのrootアクセス権がある場合、システムの初期化フロー(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

このスクリプトは、start.shとして特定の場所($ HOMEなど)に保存できます。次のコマンドを実行して、(単純化するために)ワールド実行権限を付与します。

$ 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システムがそれをサポートしている場合(通常はサポートしています)、これにより、起動時にスクリプトが確実に実行されます。

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

于 2010-02-08T00:58:12.247 に答える
14

ファイルに次の行を追加すると、/etc/init.d/solrRed 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.
于 2011-07-06T13:06:21.260 に答える
12

ここでは、次の 3 つの手順を実行する必要があります。

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

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

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

#!/ビン/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 ] の場合
    それから
        「完了」をエコーし​​ます。
    そうしないと
        echo "失敗しました。詳細については、エラー コードを参照してください。"
    フィ
    $RETVAL を返す
}

止まる () {
    # デーモン停止
    echo -n "solr を停止しています..."

    デーモン --stop --name=solr --verbose
    RETVAL=$?

    [ $RETVAL = 0 ] の場合
    それから
        「完了」をエコーし​​ます。
    そうしないと
        echo "失敗しました。詳細については、エラー コードを参照してください。"
    フィ
    $RETVAL を返す
}


再起動 () {
    デーモン --restart --name=solr --verbose
}


状態 () {
    # デーモンのステータスを報告
    デーモン --running --verbose --name=solr
    $を返しますか?
}


ケース「$1」
    始める)
        始める
    ;;
    状態)
        状態
    ;;
    止まる)
        止まる
    ;;
    再起動)
        再起動
    ;;
    *)
        echo $"使用法: solr {start|status|stop|restart}"
        3番出口
    ;;
エサック

$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 が実行されている (通常は実行されている) と仮定して、準備完了です。

于 2011-11-04T19:26:16.707 に答える
9

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

私の他の回答のように、ここで行う必要があることが 3 つあります。

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

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

于 2015-05-08T02:12:13.133 に答える
4

スーパーマジックのコメントをフォローしてから、これに従ってください

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

彼は言い​​ます、

1 – スクリプトを /etc/init.d フォルダーにコピーします
2 – cd /etc/init.d
3 – chmod +x マイスクリプト
4 – #!/bin/bash または #!/bin/sh の直後に # を含む次の行を追加します。

# chkconfig: 2345 95 20
# 説明: いくつかの説明
# スクリプトの動作 (これが必要かどうかは不明)
# プロセス名: myscript

それからあなたはすることができます

chkconfig --myscript を追加

于 2010-08-24T22:49:19.073 に答える
0

小切手

man 5 crontab

@reboot使用しているLinuxシステムでサポートされているかどうかを確認してください。

于 2010-01-27T22:35:44.070 に答える