現時点では、/usr/Java/Apache-solr-1.4.0/example
そして次に:
Java -jar start.jar
ブート時にこれを自動的に開始するにはどうすればよいですか?
共有Linuxサーバーを使用しています。
マシンへのルートアクセスがある場合は、システムの初期化フロー(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システムがサポートしている場合(通常はサポートしています)、これにより、起動時にスクリプトが実行されます。
上記のタイプミスがない場合は、うまくいくはずです。それがどうなるか教えてください。
共有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
/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.
ここで実行する必要がある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が実行されている(通常は実行されている)と仮定して、準備ができているはずです。
私はこの質問に答えました 一度 、しかしその答えはSysVを使用したオペレーティングシステムに対するもので、これは systemd をますます使用している新しいオペレーティングシステムに対するものです。
私の他の答え のように、ここで3つのことをする必要があります:
systemd
ログを永続化します。使用できる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
ディレクティブを使用してそれを行うことができます。
これはかなり簡単ですが、ルールがあります。起動時に起動するには、ファイルを/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が作成するすべてのstdoutとstderrを受け取り、/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 #description:Some description #スクリプトの動作(ただし、これが必要かどうかはわかりません) #processname:myscript
その後、あなたはできる
chkconfig --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システムでサポートされています。