На данный момент я должен идти в /usr/java/apache-solr-1.4.0/example
а затем сделать:
java -jar start.jar
Как мне заставить это запускаться автоматически при загрузке?
Я на общем сервере Linux.
Если у вас есть 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 поддерживает ее (что обычно и происходит), это обеспечит запуск вашего скрипта при запуске.
Если у меня нет опечаток выше, это должно сработать для вас. Дайте мне знать, как это происходит.
Поскольку вы используете общий 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
Добавление следующих строк в мой /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.
Здесь нужно выполнить три шага:
Для номер один я настроил сценарий супермагики сверху. Это было нормально, но было несколько опечаток, не хватало некоторых функций (статус, перезапуск), не очень эффективно использовала утилиту демона.
Вот моя версия сценария (убедитесь, что у вас есть демон установлено для того, чтобы оно работало):
#! / 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 запущен (обычно это так).
Я ответила на этот вопрос однажды уже, но этот ответ был для операционных систем, которые использовали SysV, и этот для новых операционных систем, которые все чаще используют Systemd.
Как в мой другой ответ, Есть три вещи, которые вам нужно сделать здесь:
systemd
логи постоянные.Вот 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
директивы.
Больше документации для этих файлов здесь.
Это довольно просто, но есть правила. Чтобы запустить его при загрузке, поместите файл в /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
Дневник демона получит все stdout и stderr, которые создает Solr, и будет сохранен в двоичный формат под /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 # описание: некоторое описание # Что делает ваш скрипт (не уверен, если это необходимо, хотя) # имя процесса: myscript
Тогда вы можете сделать
chkconfig — добавить myscript
Скрипт 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 $?
Проверьте
man 5 crontab
Видишь ли, если @reboot
поддерживается в используемой вами системе Linux.