ubuntu12.04 Daemon的简单实现

使用命令 start-stop-daemon

官方文档:http://manpages.ubuntu.com/manpages/lucid/en/man8/start-stop-daemon.8.html

Usage: start-stop-daemon [<option> ...] <command>



Commands:

  -S|--start -- <argument> ...  start a program and pass <arguments> to it

  -K|--stop                     stop a program

  -T|--status                   get the program status

  -H|--help                     print help information

  -V|--version                  print version



Matching options (at least one is required):

  -p|--pidfile <pid-file>       pid file to check

  -x|--exec <executable>        program to start/check if it is running

  -n|--name <process-name>      process name to check

  -u|--user <username|uid>      process owner to check



Options:

  -g|--group <group|gid>        run process as this group

  -c|--chuid <name|uid[:group|gid]>

                                change to this user/group before starting

                                  process

  -s|--signal <signal>          signal to send (default TERM)

  -a|--startas <pathname>       program to start (default is <executable>)

  -r|--chroot <directory>       chroot to <directory> before starting

  -d|--chdir <directory>        change to <directory> (default is /)

  -N|--nicelevel <incr>         add incr to the process' nice level

  -P|--procsched <policy[:prio]>

                                use <policy> with <prio> for the kernel

                                  process scheduler (default prio is 0)

  -I|--iosched <class[:prio]>   use <class> with <prio> to set the IO

                                  scheduler (default prio is 4)

  -k|--umask <mask>             change the umask to <mask> before starting

  -b|--background               force the process to detach

  -m|--make-pidfile             create the pidfile before starting

  -R|--retry <schedule>         check whether processes die, and retry

  -t|--test                     test mode, don't do anything

  -o|--oknodo                   exit status 0 (not 1) if nothing done

  -q|--quiet                    be more quiet

  -v|--verbose                  be more verbose



Retry <schedule> is <item>|/<item>/... where <item> is one of

 -<signal-num>|[-]<signal-name>  send that signal

 <timeout>                       wait that many seconds

 forever                         repeat remainder forever

or <schedule> may be just <timeout>, meaning <signal>/<timeout>/KILL/<timeout>



The process scheduler <policy> can be one of:

  other, fifo or rr



The IO scheduler <class> can be one of:

  real-time, best-effort or idle



Exit status:

  0 = done

  1 = nothing done (=> 0 if --oknodo)

  2 = with --retry, processes would not die

  3 = trouble

Exit status with --status:

  0 = program is running

  1 = program is not running and the pid file exists

  3 = program is not running

  4 = unable to determine status

  

demo:

odoo的启动脚本

#!/bin/sh



### BEGIN INIT INFO

# Provides:             openerp-server

# Required-Start:       $remote_fs $syslog

# Required-Stop:        $remote_fs $syslog

# Should-Start:         $network

# Should-Stop:          $network

# Default-Start:        2 3 4 5

# Default-Stop:         0 1 6

# Short-Description:    Enterprise Resource Management software

# Description:          Open ERP is a complete ERP and CRM software.

### END INIT INFO



PATH=/bin:/sbin:/usr/bin

DAEMON=/opt/openerp/server/openerp-server

NAME=openerp-server

DESC=openerp-server



# Specify the user name (Default: openerp).

USER=openerp



# Specify an alternate config file (Default: /etc/openerp-server.conf).

CONFIGFILE="/etc/openerp-server.conf"



# pidfile

PIDFILE=/var/run/$NAME.pid



# Additional options that are passed to the Daemon.

DAEMON_OPTS="-c $CONFIGFILE"



[ -x $DAEMON ] || exit 0

[ -f $CONFIGFILE ] || exit 0



checkpid() {

    [ -f $PIDFILE ] || return 1

    pid=`cat $PIDFILE`

    [ -d /proc/$pid ] && return 0

    return 1

}



case "${1}" in

        start)

                echo -n "Starting ${DESC}: "



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

                        --chuid ${USER} --background --make-pidfile \

                        --exec ${DAEMON} -- ${DAEMON_OPTS}



                echo "${NAME}."

                ;;



        stop)

                echo -n "Stopping ${DESC}: "



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

                        --oknodo



                echo "${NAME}."

                ;;



        restart|force-reload)

                echo -n "Restarting ${DESC}: "



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

                        --oknodo



                sleep 1



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

                        --chuid ${USER} --background --make-pidfile \

                        --exec ${DAEMON} -- ${DAEMON_OPTS}



                echo "${NAME}."

                ;;



        *)

                N=/etc/init.d/${NAME}

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

                exit 1

                ;;

esac



exit 0

  

你可能感兴趣的:(ubuntu)