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