Как запустить Solr автоматически? - PullRequest
49 голосов
/ 28 января 2010

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

java -jar start.jar

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

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

Ответы [ 8 ]

76 голосов
/ 28 января 2010

Когда вы используете общий 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 (консоль с сетью и полный GUI ).

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

% /etc/init.d/solr start
70 голосов
/ 08 февраля 2010

Если у вас есть root-доступ к вашей машине, существует несколько способов сделать это на основе процесса инициализации вашей системы (сценарии инициализации, 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

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

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

14 голосов
/ 06 июля 2011

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

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

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

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

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

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

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

6 голосов
/ 08 мая 2015

Я ответил на этот вопрос однажды уже , но этот ответ был для операционных систем, использующих 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 Настройка файлов журнала

Бонусный раздел! Если вы хотите настроить файлы журналов, вы можете прочитать все об этом в документации здесь , но значения по умолчанию на самом деле очень безопасны и нормальны (журналы сжимаются по умолчанию, не могут быть слишком большими, скорость ограничена, и записываются на диск партиями).

3 голосов
/ 25 августа 2010

Следуйте комментариям supermagic, затем следуйте

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

1 голос
/ 14 января 2016
Скрипт

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 $?
0 голосов
/ 28 января 2010

Проверка

man 5 crontab

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

...