zoukankan      html  css  js  c++  java
  • 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 "00" "
    "|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
    
  • 相关阅读:
    Xib和storyboard对比
    IOS中用模型取代字典的好处
    IOS中UIButton和UIImageView的区别
    Response对象
    ASP.NET内置对象
    ASP.NET最常用的页面生命周期事件
    构造函数与析构函数
    C#程序设计基础——类、对象、方法
    CI框架分页(不解错误)
    Linux 下直连ipad mini充电(实战)
  • 原文地址:https://www.cnblogs.com/tgis/p/4655915.html
Copyright © 2011-2022 走看看