Guest User

Untitled

a guest
Jul 23rd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -e
  4.  
  5. home=$(pwd)
  6.  
  7. INIT_SYSTEM="unknown"
  8. SERVICE_NAME="<Имя сервиса>" # Имя твоего сервиса, например mydotnetserver
  9. SERVICE_DESCRIPTION="<Описание твоего сервиса>"
  10. PROJECT_PATH="$home/" # Путь к папке с файлом Server.dll
  11. PROJECT_BIN="<Имя файла DLL>" # Например Server.dll
  12.  
  13. if [[ `/sbin/init --version` =~ upstart ]]; then INIT_SYSTEM="upstart";
  14. elif [[ `systemctl` =~ -\.mount ]]; then INIT_SYSTEM="systemd";
  15. elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]; then INIT_SYSTEM="sysv-init";
  16. else INIT_SYSTEM="unknown"; fi
  17.  
  18. if [[ "$INIT_SYSTEM" = "unknown" ]]; then
  19. echo "Unknown init system. Nothing done"
  20. exit 1
  21. fi
  22.  
  23. if [[ "$INIT_SYSTEM" = "upstart" ]]; then
  24. echo "Detected UPSTART init system"
  25.  
  26. echo "Creating $SERVICE_NAME service entry..."
  27.  
  28. UPSTART_SERVICE_TEMPLATE=$(cat <<EOF
  29. description "$SERVICE_DESCRIPTION"
  30.  
  31. start on (started networking)
  32. stop on shutdown
  33.  
  34. script
  35. echo $$ > /var/run/$SERVICE_NAME.pid
  36. cd "$PROJECT_PATH"
  37. exec /usr/bin/dotnet "$PROJECT_BIN"
  38. end script
  39.  
  40. respawn
  41.  
  42. pre-stop script
  43. rm -f /var/run/$SERVICE_NAME.pid
  44. end script
  45. EOF
  46. )
  47.  
  48. echo "$UPSTART_SERVICE_TEMPLATE" > "/etc/init/$SERVICE_NAME.conf"
  49.  
  50. echo "Starting the service..."
  51. initctl start "$SERVICE_NAME"
  52. fi
  53.  
  54. if [[ "$INIT_SYSTEM" = "systemd" ]]; then
  55. echo "Detected SYSTEMD init system"
  56.  
  57. echo "Creating $SERVICE_NAME service entry..."
  58.  
  59. SYSTEMD_SERVICE_TEMPLATE=$(cat <<EOF
  60. [Unit]
  61. Description=$SERVICE_DESCRIPTION
  62. Wants=network.target
  63. After=network.target
  64.  
  65. [Service]
  66. WorkingDirectory=$PROJECT_PATH
  67. ExecStart=/usr/bin/dotnet "$PROJECT_BIN"
  68. Restart=on-failure
  69.  
  70. [Install]
  71. WantedBy=multi-user.target
  72. EOF
  73. )
  74.  
  75. echo "$SYSTEMD_SERVICE_TEMPLATE" > "/etc/systemd/system/$SERVICE_NAME.service"
  76.  
  77. echo "Realoading services..."
  78. systemctl daemon-reload
  79.  
  80. echo "Enabling the service..."
  81. systemctl enable "$SERVICE_NAME"
  82.  
  83. echo "Starting the service..."
  84. systemctl start "$SERVICE_NAME"
  85. fi
  86.  
  87. if [[ "$INIT_SYSTEM" = "sysv-init" ]]; then
  88. echo "Detected SYSV init system"
  89.  
  90. echo "Creating $SERVICE_NAME service entry..."
  91.  
  92. SCRIPT="/usr/bin/dotnet \\\"$PROJECT_PATH$PROJECT_BIN\\\""
  93.  
  94. PIDFILE="/var/run/$SERVICE_NAME.pid"
  95. LOGFILE="/var/log/$SERVICE_NAME.log"
  96.  
  97. SYSV_SERVICE_TEMPLATE=$(cat <<EOF
  98. #!/bin/sh
  99. ### BEGIN INIT INFO
  100. # Provides: $SERVICE_NAME
  101. # Required-Start: \$local_fs \$network \$named \$time \$syslog
  102. # Required-Stop: \$local_fs \$network \$named \$time \$syslog
  103. # Default-Start: 2 3 4 5
  104. # Default-Stop: 0 1 6
  105. # Description: $SERVICE_DESCRIPTION
  106. ### END INIT INFO
  107.  
  108. start() {
  109. if [ -f "$PIDFILE" ] && kill -0 \$(cat "$PIDFILE") 2> /dev/null; then
  110. echo "Service already running" >&2
  111. return 1
  112. fi
  113. echo "Starting service..." >&2
  114. local CMD="($SCRIPT > \"$LOGFILE\") &"
  115. eval \$CMD
  116. echo \$! > "$PIDFILE"
  117. echo "Service started" >&2
  118. }
  119.  
  120. stop() {
  121. if [ ! -f "$PIDFILE" ] || ! kill -0 \$(cat "$PIDFILE") 2> /dev/null; then
  122. echo 'Service not running' >&2
  123. return 1
  124. fi
  125. echo 'Stopping service...' >&2
  126. kill -15 \$(cat "$PIDFILE") && rm -f "$PIDFILE"
  127. echo 'Service stopped' >&2
  128. }
  129.  
  130. uninstall() {
  131. FD=0
  132. INTERACTIVE=0
  133. if [ -t "\$FD" -o -p /dev/stdin ]; then
  134. INTERACTIVE=1
  135. fi
  136.  
  137. SURE="no"
  138. if [ "\$INTERACTIVE" -eq 1 ]; then
  139. echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No]: "
  140. read SURE
  141. echo
  142. fi
  143.  
  144. if [ "\$INTERACTIVE" -eq 0 -o "\$SURE" = "yes" ]; then
  145. stop
  146. rm -f "$PIDFILE"
  147. echo "Notice: log file is not be removed: '$LOGFILE'" >&2
  148. update-rc.d -f $SERVICE_NAME remove
  149. rm -fv "\$0"
  150. fi
  151. }
  152.  
  153. case "\$1" in
  154. start)
  155. start
  156. ;;
  157. stop)
  158. stop
  159. ;;
  160. uninstall)
  161. uninstall
  162. ;;
  163. retart)
  164. stop
  165. start
  166. ;;
  167. *)
  168. echo "Usage: \$0 {start|stop|restart|uninstall}"
  169. esac
  170.  
  171. EOF
  172. )
  173.  
  174. echo "$SYSV_SERVICE_TEMPLATE" > "/etc/init.d/$SERVICE_NAME"
  175. chmod +x "/etc/init.d/$SERVICE_NAME"
  176.  
  177. echo "Starting the service..."
  178. service "$SERVICE_NAME" start
  179.  
  180. echo "Updating the service..."
  181. update-rc.d $SERVICE_NAME defaults
  182. fi
  183.  
  184. echo "Service successfully installed"
Add Comment
Please, Sign In to add comment