На данный момент мне нужно перейти к /usr/java/apache-solr-1.4.0/example
, а затем сделать:
java -jar start.jar
Как мне заставить это автоматически запускаться при загрузке?
Я использую общий Linux-сервер.
На данный момент мне нужно перейти к /usr/java/apache-solr-1.4.0/example
, а затем сделать:
java -jar start.jar
Как мне заставить это автоматически запускаться при загрузке?
Я использую общий Linux-сервер.
Если у вас есть root-доступ к вашему компьютеру, существует несколько способов сделать это на основе потока инициализации системы (сценарии инициализации, systemd и т.д.).
Но если у вас нет root, cron
имеет чистый и последовательный способ запуска программ при перезагрузке.
Сначала узнайте, где находится Java на вашем компьютере. Следующая команда сообщит вам, где она находится:
$ which java
Затем вставьте следующий код в оболочку script, заменив путь java ниже (/usr/bin) на путь, который вы получили от указанной выше команды.
#!/bin/bash
cd /usr/java/apache-solr-1.4.0/example
/usr/bin/java -jar start.jar
Вы можете сохранить этот script в некотором месте (например, $HOME) в качестве start.sh. Дайте ему разрешение на выполнение всего мира (для упрощения), выполнив следующую команду:
$ chmod og+x start.sh
Теперь протестируйте script и убедитесь, что он корректно работает из командной строки.
$ ./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 поддерживает ее (как это обычно бывает), это гарантирует, что ваш script запускается при запуске.
Если у меня нет опечаток выше, это должно хорошо сработать для вас. Дайте мне знать, как это происходит.
Поскольку вы находитесь в общем поле Linux, вам нужно попросить системного администратора сделать следующее, возможно.
Создайте запуск script в /etc/init.d/solr
.
Скопируйте этот код, мой Solr startup script, в этот файл:
#!/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 default
... или, если ваш дистрибутив 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.
Здесь нужно выполнить три шага:
Для первого номера я настроил супермагический script сверху. Все было в порядке, но у него было несколько опечаток, которые не обладали некоторой функциональностью (статус, перезапуск), не очень эффективно использовали утилиту daemon.
Здесь моя версия script (убедитесь, что у вас есть daemon, чтобы она работала):
#!/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
Поместите этот script в /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 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
журналирующий демон получит все stdout и stderr, созданные Solr, и он будет сохранен в двоичный формат в разделе /var/log/journal/
.
Способ systemd
обрабатывает ведение журнала довольно аккуратно и стоит изучить, если вы не знакомы с ним. В то же время просто знайте, что для чтения записей в журнале вам нужно будет использовать новый инструмент под названием journalctl
. Например, это будет следовать за вашими журналами solr:
journalctl -u solr -f
И есть также флаги для фильтрации на основе даты и т.д.
Бонусный раздел! Если вы хотите настроить файлы журналов, вы можете прочитать все об этом в документации здесь, но значения по умолчанию на самом деле очень безопасны и разумны ( журналы сжимаются по умолчанию, не могут расти слишком большими, ограничены скоростью и записываются на диск в партиях).
Следуйте сверхмагическим комментариям, затем следуйте этим
http://codingrecipes.com/service-x-does-not-support-chkconfig
Он говорит:
1 – Copy your script into /etc/init.d folder 2 – cd /etc/init.d 3 – chmod +x myscript 4 – Add these lines, including #, right after #!/bin/bash or #!/bin/sh: # chkconfig: 2345 95 20 # description: Some description # What your script does (not sure if this is necessary though) # processname: myscript
Затем вы можете сделать
chkconfig --add myscript
init.d/solr script, который был протестирован на Centos 6/Amazon Linux. Он обматывает собственный 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.