假设我的许可证服务器安装在这里:/ opt / jetbrains-license-server,如何将其configuration为自动启动?
@ 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
jochem的答案更加彻底和正确,请参考。
首先,在您的服务器上创build一个jetbrains用户。
其次,假设您select使用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
两个答案都是正确的,虽然他们在一个方面失败,
如果您正在使用基础结构作为代码框架(例如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
你可以扩大这个基于返回码给用户提供有用的消息,但我没有去那么远。