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