Назад | Перейти на главную страницу

Как мне автоматически запустить сервер лицензий Jetbrains в моей системе Ubuntu?

Предполагая, что мой сервер лицензий установлен здесь: / opt / jetbrains-license-server, как мне настроить его для автоматического запуска?

Ответ jochem более подробный и правильный, пожалуйста, укажите его.

Сначала создайте пользователя jetbrains на своем сервере.

Во-вторых, если вы решили использовать init.d (System V), сделайте следующее:

$ touch /etc/init.d/jetbrains-license-server
$ chmod +x /etc/init.d/jetbrains-license-server

Теперь поместите в этот файл следующее содержимое:

#!/bin/bash

# Startup script for Jetbrains License Server
#
# chkconfig: 345 86 14
# description: Jetbrains License Server
# processname: license-server.sh
# pidfile: /opt/jetbrains-license-server/server.pid

### BEGIN INIT INFO
# Provides:          jetbrains-license-server
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Jetbrains License Server
# Description:       Manages the Jetbrains License Server Service
### END INIT INFO

APP=jetbrains-license-server
USER=jetbrains
BASE=/opt/jetbrains-license-server

case "$1" in
  # Start command
  start)
    echo "Starting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh start &> /dev/null"
    ;;
  # Stop command
  stop)
    echo "Stopping $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh stop &> /dev/null"
    echo "$APP stopped successfully"
    ;;
  # Restart command
  restart)
    echo "Restarting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh restart"
    ;;
  # Status command
  status)
    echo "$APP Status"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh status"
    ;;
  *)
    echo "Usage: /etc/init.d/$APP {start|restart|stop}"
    exit 1
    ;;
esac

exit 0

Ответ @ chris-betti верен. Однако для систем на основе DEBIAN у меня есть три дополнения:

  1. убедитесь, что на уровне запуска 2 также запущен сервер лицензий
  2. убедитесь, что есть пользователь Jetbrains
  3. убедитесь, что файл PID находится в правильном месте (/opt//logs/license-server.pid)

объявление 1: см. файл сценария ниже. Вам нужно изменить строку # Default Start читать:

# Default-Start:     2 3 4 5

объявление 2. Убедитесь, что у вас есть системный пользователь jetbrains, который может запускать службу (и имеет разрешение на запись в каталог, в который вы установили сервер лицензий.

# as root
adduser --system --no-create-home jetbrains
chown jetbrains:nogroup -R /opt/jetbrains-license-server

объявление 3: Что касается файла PID, вам нужно изменить строку с # pidfile: кому:

# pidfile: /opt/jetbrains-license-server/logs/license-server.pid

Установите демон:

Есть еще одно дополнение для установки службы на различные уровни запуска для систем на основе Debian (Debian, Ubuntu). Это гарантирует, что служба запускается при загрузке и останавливается при остановке.

# as root
update-rc.d jetbrains-license-server defaults
update-rc.d jetbrains-license-server enable

Скрипт со всеми изменениями

Вот сценарий со всеми внесенными изменениями.

#
# chkconfig: 345 86 14
# description: Jetbrains License Server
# processname: license-server.sh
# pidfile: /opt/jetbrains-license-server/logs/license-server.pid

### BEGIN INIT INFO
# Provides:          jetbrains-license-server
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Jetbrains License Server
# Description:       Manages the Jetbrains License Server Service
### END INIT INFO

APP=jetbrains-license-server
USER=jetbrains
BASE=/opt/jetbrains-license-server

case "$1" in
  # Start command
  start)
    echo "Starting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh start &> /dev/null"
    ;;
  # Stop command
  stop)
    echo "Stopping $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh stop &> /dev/null"
    echo "$APP stopped successfully"
    ;;
  # Restart command
  restart)
    echo "Restarting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh restart"
    ;;
  # Status command
  status)
    echo "$APP Status"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh status"
    ;;
  *)
    echo "Usage: /etc/init.d/$APP {start|restart|stop}"
    exit 1
    ;;
esac

exit 0

Оба ответа верны, хотя в одном они не верны.

Если вы используете сценарий для инфраструктуры как кода (например, Ansible / Puppet), который использует код возврата статуса, чтобы определить, какое действие следует предпринять, предоставленный сценарий, который всегда возвращает 0, не будет успешно запускать приложение автоматически, когда приложение остановлено.

Мое дополнение к сценарию - захватить код возврата для каждого из делегированных вызовов и использовать его как код выхода и нижнюю часть:

#
# chkconfig: 345 86 14
# description: Jetbrains License Server
# processname: license-server.sh
# pidfile: /opt/jetbrains-license-server/logs/license-server.pid

### BEGIN INIT INFO
# Provides:          jetbrains-license-server
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Jetbrains License Server
# Description:       Manages the Jetbrains License Server Service
### END INIT INFO

APP=jetbrains-license-server
USER=jetbrains
BASE=/opt/jetbrains-license-server
RETCODE=0

case "$1" in
  # Start command
  start)
    echo "Starting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh start &> /dev/null"
    RETCODE=$?
    ;;
  # Stop command
  stop)
    echo "Stopping $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh stop &> /dev/null"
    RETCODE=$?
    ;;
  # Restart command
  restart)
    echo "Restarting $APP"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh restart"
    RETCODE=$?
    ;;
  # Status command
  status)
    echo "$APP Status"
    /bin/su -m $USER -c "cd $BASE && $BASE/bin/license-server.sh status"
    RETCODE=$?
    ;;
  *)
    echo "Usage: /etc/init.d/$APP {start|restart|stop}"
    exit 1
    ;;
esac

exit $RETCODE

Вы можете расширить это, чтобы предоставлять пользователю полезные сообщения на основе кода возврата, но я не стал заходить так далеко.