Linux — Как запустить Solr автоматически?

На данный момент я должен идти в /usr/java/apache-solr-1.4.0/example а затем сделать:

java -jar start.jar

Как мне заставить это запускаться автоматически при загрузке?

Я на общем сервере Linux.

49

Решение

Если у вас есть root-доступ к вашей машине, существует несколько способов сделать это на основе процесса инициализации вашей системы (сценарии инициализации, systemd и т. Д.).

Но если у вас нет рута, 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

Если все работает хорошо, вам нужно добавить его в один из сценариев запуска вашего компьютера. Самый простой способ сделать это — добавить следующую строку в конец /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 поддерживает ее (что обычно и происходит), это обеспечит запуск вашего скрипта при запуске.

Если у меня нет опечаток выше, это должно сработать для вас. Дайте мне знать, как это происходит.

69

Другие решения

Поскольку вы используете общий 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.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 (консоль с сетью & полный графический интерфейс пользователя).

Чтобы запустить Solr вручную, запустите:

% /etc/init.d/solr start
76

Добавление следующих строк в мой /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

Здесь нужно выполнить три шага:

  1. Создайте сценарий, сделайте его исполняемым и поместите его в нужное место.
  2. Сделайте так, чтобы скрипт правильно запускался при перезагрузке.
  3. Бонус: настройте сценарий logrotation, чтобы журналы не выходили из-под контроля.

Для номер один я настроил сценарий супермагики сверху. Это было нормально, но было несколько опечаток, не хватало некоторых функций (статус, перезапуск), не очень эффективно использовала утилиту демона.

Вот моя версия сценария (убедитесь, что у вас есть демон установлено для того, чтобы оно работало):

#! / Bin / ш

# Предпосылки:
# 1. Solr должен быть установлен в / usr / local / solr / example
# 2. демон должен быть установлен
# 3. Скрипт должен быть выполнен пользователем root

# Этот скрипт запустит Solr в режиме, который автоматически возродится, если он
# вылетает. Вывод будет отправлен в /var/log/solr/solr.log. Пид файл будет
# создано в стандартном местоположении.

Начните () {
echo -n "Начиная Solr ..."
# start daemon
daemon --chdir = '/ usr / local / solr / example' --команда "java -jar start.jar" --respawn --output = / var / log / solr / solr.log --name = solr - подробный

RETVAL = $?
если [$ RETVAL = 0]
затем
эхо "сделано" еще
echo "не удалось. См. код ошибки для получения дополнительной информации." fi
вернуть $ RETVAL
}

стоп () {
# стоп демон
echo -n "Остановка решения ..."
демон --stop --name = solr --verbose
RETVAL = $?

если [$ RETVAL = 0]
затем
эхо "сделано" еще
echo "не удалось. См. код ошибки для получения дополнительной информации." fi
вернуть $ RETVAL
}


запустить снова () {
демон --restart --name = solr --verbose
}


статус () {
# отчет о состоянии демона
демон --running --verbose --name = solr
вернуть $?
}


дело "1 доллар" в
Начните)
Начните
;;
статус)
статус
;;
стоп)
стоп
;;
запустить снова)
запустить снова
;;
*)
echo $ "Использование: solr {start | status | stop | restart}" exit 3
;;
ESAC

выход $ RETVAL

Поместите этот скрипт в /etc/init.d/solr, сделайте его исполняемым, и вы должны хорошо выполнить первый шаг. Теперь вы можете запустить / остановить / перезапустить / состояние демона solr с помощью /etc/init.d/solr start | stop | restart | status

Для второго шага запустите следующее на машине с 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

Я ответила на этот вопрос однажды уже, но этот ответ был для операционных систем, которые использовали 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Дневник демона получит все stdout и stderr, которые создает Solr, и будет сохранен в двоичный формат под /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
# описание: некоторое описание
# Что делает ваш скрипт (не уверен, если это необходимо, хотя)
# имя процесса: myscript

Тогда вы можете сделать

chkconfig — добавить myscript

3

Скрипт init.d / solr, протестированный на Centos 6 / Amazon Linux. Оборачивает родной CLI Solr.

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

Проверьте

man 5 crontab

Видишь ли, если @reboot поддерживается в используемой вами системе Linux.

0