Подтвердить что ты не робот

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

На данный момент мне нужно перейти к /usr/java/apache-solr-1.4.0/example, а затем сделать:

java -jar start.jar

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

Я использую общий Linux-сервер.

4b9b3361

Ответ 1

Если у вас есть 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 запускается при запуске.

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

Ответ 2

Поскольку вы находитесь в общем поле 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

Ответ 3

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

Ответ 4

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

  • Создайте script, сделайте его исполняемым и поместите его в нужное место.
  • Сделайте перезагрузку script при перезагрузке.
  • Бонус: установите логротацию script, поэтому журналы не выходят из-под контроля.

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

Ответ 5

Я уже ответил на этот вопрос уже, но этот ответ был для операционных систем, которые использовали SysV, и это для новых операционных систем, которые все чаще используют systemd.

Как и в моем другом ответе, вам нужно будет сделать три вещи:

  • Создайте script и поместите его в нужное место.
  • Сделайте перезагрузку script при перезагрузке.
  • Бонус: Сделайте журналы systemd постоянными.

1. Создав script и положив его в нужное место

Здесь 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.

Дополнительная документация для этих файлов находится здесь.

2. Запустите script при загрузке

Это довольно просто, но есть правила. Чтобы начать загрузку, поместите файл в /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

Следуйте сверхмагическим комментариям, затем следуйте этим

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

Ответ 7

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 $?

Ответ 8

Проверка

man 5 crontab

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