linux服务方式启动程序脚本(init.d脚本)

这才是真正正确的让jar后台启动的脚本,网络上的各种nohoup的脚本都是临时执行一次任务用的。

#!/bin/sh

#

# init.d script 

#

#

### BEGIN INIT INFO

# Provides:          mongodb

# Required-Start:    $network $local_fs $remote_fs

# Required-Stop:     $network $local_fs $remote_fs

# Should-Start:      $named

# Should-Stop:

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: An object/document-oriented database

# Description:       MongoDB is a high-performance, open source, schema-free

#                    document-oriented  data store that's easy to deploy, manage

#                    and use. It's network accessible, written in C++ and offers

#                    the following features:

#                    .

#                       * Collection oriented storage - easy storage of object-

#                         style data

#                       * Full index support, including on inner objects

#                       * Query profiling

#                       * Replication and fail-over support

#                       * Efficient storage of binary data including large

#                         objects (e.g. videos)

#                       * Auto-sharding for cloud-level scalability (Q209)

#                    .

#                    This package is build with V8 JavaScript engine.

#                    .

#                    High performance, scalability, and reasonable depth of

#                    functionality are the goals for the project.

### END INIT INFO



DAEMON=/usr/local/jdk1.8.0_40/bin/java

OPTION=-jar

VAR=/usr/local/danabang.storage/danabang.storage.jar

DESC=danabang.storage



# Default defaults.  Can be overridden by the /etc/default/$NAME

NAME=danabang.storage

PIDFILE=/var/data/danabang.storage/log/$NAME.pid

RUNAS=tangrui





if test ! -x $DAEMON; then

    echo "Could not find $DAEMON"

    exit 0

fi





. /lib/lsb/init-functions



STARTTIME=1

DIETIME=10                   # Time to wait for the server to die, in seconds

                            # If this value is set too low you might not

                            # let some servers to die gracefully and

                            # 'restart' will not work





running_pid() {

# Check if a given process pid's cmdline matches a given name

    pid=$1

    name=$2

    [ -z "$pid" ] && return 1

    [ ! -d /proc/$pid ] &&  return 1

    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`

    # Is this the expected server

    [ "$cmd" != "$name" ] &&  return 1

    return 0

}



running() {

# Check if the process is running looking at /proc

# (works for all users)



    # No pidfile, probably no daemon present

    [ ! -f "$PIDFILE" ] && return 1

    pid=`cat $PIDFILE`

    running_pid $pid $DAEMON || return 1

    return 0

}



start_server() {

# Start the process using the wrapper

            start-stop-daemon --background --start --quiet --pidfile $PIDFILE \

                        --make-pidfile --chuid $RUNAS \

                        --exec $DAEMON -- $OPTION $VAR

            errcode=$?

	return $errcode

}



stop_server() {

# Stop the process using the wrapper

            start-stop-daemon --stop --quiet --pidfile $PIDFILE \

                        --user $RUNAS \

                        --exec $DAEMON

            errcode=$?

	return $errcode

}



force_stop() {

# Force the process to die killing it manually

	[ ! -e "$PIDFILE" ] && return

	if running ; then

		kill -15 $pid

	# Is it really dead?

		sleep "$DIETIME"s

		if running ; then

			kill -9 $pid

			sleep "$DIETIME"s

			if running ; then

				echo "Cannot kill $NAME (pid=$pid)!"

				exit 1

			fi

		fi

	fi

	rm -f $PIDFILE

}





case "$1" in

  start)

	log_daemon_msg "Starting $DESC" "$NAME"

        # Check if it's running first

        if running ;  then

            log_progress_msg "apparently already running"

            log_end_msg 0

            exit 0

        fi

        if start_server ; then

            # NOTE: Some servers might die some time after they start,

            # this code will detect this issue if STARTTIME is set

            # to a reasonable value

            [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time

            if  running ;  then

                # It's ok, the server started and is running

                log_end_msg 0

            else

                # It is not running after we did start

                log_end_msg 1

            fi

        else

            # Either we could not start it

            log_end_msg 1

        fi

	;;

  stop)

        log_daemon_msg "Stopping $DESC" "$NAME"

        if running ; then

            # Only stop the server if we see it running

			errcode=0

            stop_server || errcode=$?

            log_end_msg $errcode

        else

            # If it's not running don't do anything

            log_progress_msg "apparently not running"

            log_end_msg 0

            exit 0

        fi

        ;;

  force-stop)

        # First try to stop gracefully the program

        $0 stop

        if running; then

            # If it's still running try to kill it more forcefully

            log_daemon_msg "Stopping (force) $DESC" "$NAME"

			errcode=0

            force_stop || errcode=$?

            log_end_msg $errcode

        fi

	;;

  restart|force-reload)

        log_daemon_msg "Restarting $DESC" "$NAME"

		errcode=0

        stop_server || errcode=$?

        # Wait some sensible amount, some server need this

        [ -n "$DIETIME" ] && sleep $DIETIME

        start_server || errcode=$?

        [ -n "$STARTTIME" ] && sleep $STARTTIME

        running || errcode=$?

        log_end_msg $errcode

	;;

  status)



        log_daemon_msg "Checking status of $DESC" "$NAME"

        if running ;  then

            log_progress_msg "running"

            log_end_msg 0

        else

            log_progress_msg "apparently not running"

            log_end_msg 1

            exit 1

        fi

        ;;

  *)

	N=/etc/init.d/$NAME

	echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2

	exit 1

	;;

esac



exit 0

 

你可能感兴趣的:(linux)