Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -e
- home=$(pwd)
- INIT_SYSTEM="unknown"
- SERVICE_NAME="<Имя сервиса>" # Имя твоего сервиса, например mydotnetserver
- SERVICE_DESCRIPTION="<Описание твоего сервиса>"
- PROJECT_PATH="$home/" # Путь к папке с файлом Server.dll
- PROJECT_BIN="<Имя файла DLL>" # Например Server.dll
- if [[ `/sbin/init --version` =~ upstart ]]; then INIT_SYSTEM="upstart";
- elif [[ `systemctl` =~ -\.mount ]]; then INIT_SYSTEM="systemd";
- elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]; then INIT_SYSTEM="sysv-init";
- else INIT_SYSTEM="unknown"; fi
- if [[ "$INIT_SYSTEM" = "unknown" ]]; then
- echo "Unknown init system. Nothing done"
- exit 1
- fi
- if [[ "$INIT_SYSTEM" = "upstart" ]]; then
- echo "Detected UPSTART init system"
- echo "Creating $SERVICE_NAME service entry..."
- UPSTART_SERVICE_TEMPLATE=$(cat <<EOF
- description "$SERVICE_DESCRIPTION"
- start on (started networking)
- stop on shutdown
- script
- echo $$ > /var/run/$SERVICE_NAME.pid
- cd "$PROJECT_PATH"
- exec /usr/bin/dotnet "$PROJECT_BIN"
- end script
- respawn
- pre-stop script
- rm -f /var/run/$SERVICE_NAME.pid
- end script
- EOF
- )
- echo "$UPSTART_SERVICE_TEMPLATE" > "/etc/init/$SERVICE_NAME.conf"
- echo "Starting the service..."
- initctl start "$SERVICE_NAME"
- fi
- if [[ "$INIT_SYSTEM" = "systemd" ]]; then
- echo "Detected SYSTEMD init system"
- echo "Creating $SERVICE_NAME service entry..."
- SYSTEMD_SERVICE_TEMPLATE=$(cat <<EOF
- [Unit]
- Description=$SERVICE_DESCRIPTION
- Wants=network.target
- After=network.target
- [Service]
- WorkingDirectory=$PROJECT_PATH
- ExecStart=/usr/bin/dotnet "$PROJECT_BIN"
- Restart=on-failure
- [Install]
- WantedBy=multi-user.target
- EOF
- )
- echo "$SYSTEMD_SERVICE_TEMPLATE" > "/etc/systemd/system/$SERVICE_NAME.service"
- echo "Realoading services..."
- systemctl daemon-reload
- echo "Enabling the service..."
- systemctl enable "$SERVICE_NAME"
- echo "Starting the service..."
- systemctl start "$SERVICE_NAME"
- fi
- if [[ "$INIT_SYSTEM" = "sysv-init" ]]; then
- echo "Detected SYSV init system"
- echo "Creating $SERVICE_NAME service entry..."
- SCRIPT="/usr/bin/dotnet \\\"$PROJECT_PATH$PROJECT_BIN\\\""
- PIDFILE="/var/run/$SERVICE_NAME.pid"
- LOGFILE="/var/log/$SERVICE_NAME.log"
- SYSV_SERVICE_TEMPLATE=$(cat <<EOF
- #!/bin/sh
- ### BEGIN INIT INFO
- # Provides: $SERVICE_NAME
- # Required-Start: \$local_fs \$network \$named \$time \$syslog
- # Required-Stop: \$local_fs \$network \$named \$time \$syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Description: $SERVICE_DESCRIPTION
- ### END INIT INFO
- start() {
- if [ -f "$PIDFILE" ] && kill -0 \$(cat "$PIDFILE") 2> /dev/null; then
- echo "Service already running" >&2
- return 1
- fi
- echo "Starting service..." >&2
- local CMD="($SCRIPT > \"$LOGFILE\") &"
- eval \$CMD
- echo \$! > "$PIDFILE"
- echo "Service started" >&2
- }
- stop() {
- if [ ! -f "$PIDFILE" ] || ! kill -0 \$(cat "$PIDFILE") 2> /dev/null; then
- echo 'Service not running' >&2
- return 1
- fi
- echo 'Stopping service...' >&2
- kill -15 \$(cat "$PIDFILE") && rm -f "$PIDFILE"
- echo 'Service stopped' >&2
- }
- uninstall() {
- FD=0
- INTERACTIVE=0
- if [ -t "\$FD" -o -p /dev/stdin ]; then
- INTERACTIVE=1
- fi
- SURE="no"
- if [ "\$INTERACTIVE" -eq 1 ]; then
- echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No]: "
- read SURE
- echo
- fi
- if [ "\$INTERACTIVE" -eq 0 -o "\$SURE" = "yes" ]; then
- stop
- rm -f "$PIDFILE"
- echo "Notice: log file is not be removed: '$LOGFILE'" >&2
- update-rc.d -f $SERVICE_NAME remove
- rm -fv "\$0"
- fi
- }
- case "\$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- uninstall)
- uninstall
- ;;
- retart)
- stop
- start
- ;;
- *)
- echo "Usage: \$0 {start|stop|restart|uninstall}"
- esac
- EOF
- )
- echo "$SYSV_SERVICE_TEMPLATE" > "/etc/init.d/$SERVICE_NAME"
- chmod +x "/etc/init.d/$SERVICE_NAME"
- echo "Starting the service..."
- service "$SERVICE_NAME" start
- echo "Updating the service..."
- update-rc.d $SERVICE_NAME defaults
- fi
- echo "Service successfully installed"
Add Comment
Please, Sign In to add comment