- #! /bin/sh
- ### BEGIN INIT INFO
- # Provides: nginx
- # Required-Start: $remote_fs $syslog
- # Required-Stop: $remote_fs $syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: nginx init.d dash script for Ubuntu or other *nix.
- # Description: nginx init.d dash script for Ubuntu or other *nix.
- ### END INIT INFO
- #------------------------------------------------------------------------------
- # nginx - this Debian Almquist shell (dash) script, starts and stops the nginx
- # daemon for Ubuntu and other *nix releases.
- #
- # description: Nginx is an HTTP(S) server, HTTP(S) reverse \\
- # proxy and IMAP/POP3 proxy server. This \\
- # script will manage the initiation of the \\
- # server and it's process state.
- #
- # processname: nginx
- # config: /usr/local/nginx/conf/nginx.conf
- # pidfile: /usr/local/nginx/logs/nginx.pid
- # Provides: nginx
- #
- # Author: Jason Giedymin
- # <jason.giedymin AT gmail.com>.
- #
- # Version: 3.5.1 11-NOV-2013 jason.giedymin AT gmail.com
- # Notes: nginx init.d dash script for Ubuntu.
- # Tested with: Ubuntu 13.10, nginx-1.4.3
- #
- # This script's project home is:
- # http://github.com/JasonGiedymin/nginx-init-ubuntu
- #
- #------------------------------------------------------------------------------
- # MIT X11 License
- #------------------------------------------------------------------------------
- #
- # Copyright (c) 2008-2013 Jason Giedymin, http://jasongiedymin.com
- #
- # Permission is hereby granted, free of charge, to any person obtaining
- # a copy of this software and associated documentation files (the
- # "Software"), to deal in the Software without restriction, including
- # without limitation the rights to use, copy, modify, merge, publish,
- # distribute, sublicense, and/or sell copies of the Software, and to
- # permit persons to whom the Software is furnished to do so, subject to
- # the following conditions:
- #
- # The above copyright notice and this permission notice shall be
- # included in all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- #------------------------------------------------------------------------------
- #------------------------------------------------------------------------------
- # Functions
- #------------------------------------------------------------------------------
- LSB_FUNC=/lib/lsb/init-functions
- # Test that init functions exists
- test -r $LSB_FUNC || {
- echo "$0: Cannot find $LSB_FUNC! Script exiting." 1>&2
- exit 5
- }
- . $LSB_FUNC
- #------------------------------------------------------------------------------
- # Consts
- #------------------------------------------------------------------------------
- PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- DAEMON=/usr/local/nginx/sbin/nginx
- PS="nginx"
- PIDNAME="nginx" #lets you do $PS-slave
- PIDFILE=$PIDNAME.pid #pid file
- PIDSPATH=/usr/local/nginx/logs #default pid location, you should change it
- DESCRIPTION="Nginx Server..."
- RUNAS=root #user to run as
- SCRIPT_OK=0 #ala error codes
- SCRIPT_ERROR=1 #ala error codes
- TRUE=1 #boolean
- FALSE=0 #boolean
- lockfile=/var/lock/subsys/nginx
- NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
- #------------------------------------------------------------------------------
- # Simple Tests
- #------------------------------------------------------------------------------
- # Test if nginx is a file and executable
- test -x $DAEMON || {
- echo "$0: You don't have permissions to execute nginx." 1>&2
- exit 4
- }
- # Include nginx defaults if available
- if [ -f /etc/default/nginx ]; then
- . /etc/default/nginx
- fi
- #set exit condition
- #set -e
- #------------------------------------------------------------------------------
- # Functions
- #------------------------------------------------------------------------------
- setFilePerms(){
- if [ -f $PIDSPATH/$PIDFILE ]; then
- chmod 400 $PIDSPATH/$PIDFILE
- fi
- }
- configtest() {
- $DAEMON -t -c $NGINX_CONF_FILE
- }
- getPSCount() {
- return `pgrep -f $PS | wc -l`
- }
- isRunning() {
- if [ $1 ]; then
- pidof_daemon $1
- PID=$?
- if [ $PID -gt 0 ]; then
- return 1
- else
- return 0
- fi
- else
- pidof_daemon
- PID=$?
- if [ $PID -gt 0 ]; then
- return 1
- else
- return 0
- fi
- fi
- }
- #courtesy of php-fpm
- wait_for_pid () {
- try=0
- while test $try -lt 35 ; do
- case "$1" in
- 'created')
- if [ -f "$2" ]; then
- try=''
- break
- fi
- ;;
- 'removed')
- if [ ! -f "$2" ]; then
- try=''
- break
- fi
- ;;
- esac
- try=`expr $try + 1`
- sleep 1
- done
- }
- status(){
- isRunning
- isAlive=$?
- if [ "${isAlive}" -eq $TRUE ]; then
- log_warning_msg "$DESCRIPTION found running with processes: `pidof $PS`"
- rc=0
- else
- log_warning_msg "$DESCRIPTION is NOT running."
- rc=3
- fi
- return
- }
- removePIDFile(){
- if [ $1 ]; then
- if [ -f $1 ]; then
- rm -f $1
- fi
- else
- #Do default removal
- if [ -f $PIDSPATH/$PIDFILE ]; then
- rm -f $PIDSPATH/$PIDFILE
- fi
- fi
- }
- start() {
- log_daemon_msg "Starting $DESCRIPTION"
- isRunning
- isAlive=$?
- if [ "${isAlive}" -eq $TRUE ]; then
- log_end_msg $SCRIPT_ERROR
- rc=0
- else
- start-stop-daemon --start --quiet --chuid \\
- $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON \\
- -- -c $NGINX_CONF_FILE
- setFilePerms
- log_end_msg $SCRIPT_OK
- rc=0
- fi
- return
- }
- stop() {
- log_daemon_msg "Stopping $DESCRIPTION"
- isRunning
- isAlive=$?
- if [ "${isAlive}" -eq $TRUE ]; then
- start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE
- wait_for_pid 'removed' $PIDSPATH/$PIDFILE
- if [ -n "$try" ]; then
- log_end_msg $SCRIPT_ERROR
- rc=0 # lsb states 1, but under status it is 2 (which is more prescriptive). Deferring to standard.
- else
- removePIDFile
- log_end_msg $SCRIPT_OK
- rc=0
- fi
- else
- log_end_msg $SCRIPT_ERROR
- rc=7
- fi
- return
- }
- reload() {
- configtest || return $?
- log_daemon_msg "Reloading (via HUP) $DESCRIPTION"
- isRunning
- if [ $? -eq $TRUE ]; then
- kill -HUP `cat $PIDSPATH/$PIDFILE`
- log_end_msg $SCRIPT_OK
- rc=0
- else
- log_end_msg $SCRIPT_ERROR
- rc=7
- fi
- return
- }
- quietupgrade() {
- log_daemon_msg "Peforming Quiet Upgrade $DESCRIPTION"
- isRunning
- isAlive=$?
- if [ "${isAlive}" -eq $TRUE ]; then
- kill -USR2 `cat $PIDSPATH/$PIDFILE`
- kill -WINCH `cat $PIDSPATH/$PIDFILE.oldbin`
- isRunning
- isAlive=$?
- if [ "${isAlive}" -eq $TRUE ]; then
- kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
- wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
- removePIDFile $PIDSPATH/$PIDFILE.oldbin
- log_end_msg $SCRIPT_OK
- rc=0
- else
- log_end_msg $SCRIPT_ERROR
- log_daemon_msg "ERROR! Reverting back to original $DESCRIPTION"
- kill -HUP `cat $PIDSPATH/$PIDFILE`
- kill -TERM `cat $PIDSPATH/$PIDFILE.oldbin`
- kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
- wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
- removePIDFile $PIDSPATH/$PIDFILE.oldbin
- log_end_msg $SCRIPT_OK
- rc=0
- fi
- else
- log_end_msg $SCRIPT_ERROR
- rc=7
- fi
- return
- }
- terminate() {
- log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"
- PIDS=`pidof $PS` || true
- [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
- for i in $PIDS; do
- if [ "$i" = "$PIDS2" ]; then
- kill $i
- wait_for_pid 'removed' $PIDSPATH/$PIDFILE
- removePIDFile
- fi
- done
- log_end_msg $SCRIPT_OK
- rc=0
- }
- destroy() {
- log_daemon_msg "Force terminating and may include self (via KILLALL) $DESCRIPTION"
- killall $PS -q >> /dev/null 2>&1
- log_end_msg $SCRIPT_OK
- rc=0
- }
- pidof_daemon() {
- PIDS=`pidof $PS` || true
- [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
- for i in $PIDS; do
- if [ "$i" = "$PIDS2" ]; then
- return 1
- fi
- done
- return 0
- }
- action="$1"
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart|force-reload)
- stop
- # if [ $rc -ne 0 ]; then
- # script_exit
- # fi
- sleep 1
- start
- ;;
- reload)
- $1
- ;;
- status)
- status
- ;;
- configtest)
- $1
- ;;
- quietupgrade)
- $1
- ;;
- terminate)
- $1
- ;;
- destroy)
- $1
- ;;
- *)
- FULLPATH=/etc/init.d/$PS
- echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}"
- echo " The 'destroy' command should only be used as a last resort."
- exit 3
- ;;
- esac
- exit $rc
- #该片段来自于http://www.codesnippet.cn/detail/301220138339.html
来源: http://www.codesnippet.cn/detail/301220138339.html