Nginx-init-Ubuntu 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. #! /bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: nginx
  4. # Required-Start: $remote_fs $syslog
  5. # Required-Stop: $remote_fs $syslog
  6. # Default-Start: 2 3 4 5
  7. # Default-Stop: 0 1 6
  8. # Short-Description: nginx init.d dash script for Ubuntu <=9.10.
  9. # Description: nginx init.d dash script for Ubuntu <=9.10.
  10. ### END INIT INFO
  11. #------------------------------------------------------------------------------
  12. # nginx - this Debian Almquist shell (dash) script, starts and stops the nginx
  13. # daemon for ubuntu 9.10 and lesser version numbered releases.
  14. #
  15. # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
  16. # proxy and IMAP/POP3 proxy server. This \
  17. # script will manage the initiation of the \
  18. # server and it's process state.
  19. #
  20. # processname: nginx
  21. # config: /usr/local/nginx/conf/nginx.conf
  22. # pidfile: /var/run/nginx.pid
  23. # Provides: nginx
  24. #
  25. # Author: Jason Giedymin
  26. # <jason.giedymin AT gmail.com>.
  27. #
  28. # Version: 2.0 02-NOV-2009 jason.giedymin AT gmail.com
  29. # Notes: nginx init.d dash script for Ubuntu <=9.10.
  30. #
  31. # This script's project home is:
  32. # http://code.google.com/p/nginx-init-ubuntu/
  33. #
  34. #------------------------------------------------------------------------------
  35. # Functions
  36. #------------------------------------------------------------------------------
  37. . /lib/lsb/init-functions
  38. #------------------------------------------------------------------------------
  39. # Consts
  40. #------------------------------------------------------------------------------
  41. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  42. DAEMON=/usr/local/nginx/sbin/nginx
  43. PS="nginx"
  44. PIDNAME="nginx" #lets you do $PS-slave
  45. PIDFILE=$PIDNAME.pid #pid file
  46. PIDSPATH=/var/run
  47. DESCRIPTION="Nginx Server..."
  48. RUNAS=root #user to run as
  49. SCRIPT_OK=0 #ala error codes
  50. SCRIPT_ERROR=1 #ala error codes
  51. TRUE=1 #boolean
  52. FALSE=0 #boolean
  53. lockfile=/var/lock/subsys/nginx
  54. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
  55. #------------------------------------------------------------------------------
  56. # Simple Tests
  57. #------------------------------------------------------------------------------
  58. #test if nginx is a file and executable
  59. test -x $DAEMON || exit 0
  60. # Include nginx defaults if available
  61. if [ -f /etc/default/nginx ] ; then
  62. . /etc/default/nginx
  63. fi
  64. #set exit condition
  65. #set -e
  66. #------------------------------------------------------------------------------
  67. # Functions
  68. #------------------------------------------------------------------------------
  69. setFilePerms(){
  70. if [ -f $PIDSPATH/$PIDFILE ]; then
  71. chmod 400 $PIDSPATH/$PIDFILE
  72. fi
  73. }
  74. configtest() {
  75. $DAEMON -t -c $NGINX_CONF_FILE
  76. }
  77. getPSCount() {
  78. return `pgrep -f $PS | wc -l`
  79. }
  80. isRunning() {
  81. if [ $1 ]; then
  82. pidof_daemon $1
  83. PID=$?
  84. if [ $PID -gt 0 ]; then
  85. return 1
  86. else
  87. return 0
  88. fi
  89. else
  90. pidof_daemon
  91. PID=$?
  92. if [ $PID -gt 0 ]; then
  93. return 1
  94. else
  95. return 0
  96. fi
  97. fi
  98. }
  99. #courtesy of php-fpm
  100. wait_for_pid () {
  101. try=0
  102. while test $try -lt 35 ; do
  103. case "$1" in
  104. 'created')
  105. if [ -f "$2" ] ; then
  106. try=''
  107. break
  108. fi
  109. ;;
  110. 'removed')
  111. if [ ! -f "$2" ] ; then
  112. try=''
  113. break
  114. fi
  115. ;;
  116. esac
  117. #echo -n .
  118. try=`expr $try + 1`
  119. sleep 1
  120. done
  121. }
  122. status(){
  123. isRunning
  124. isAlive=$?
  125. if [ "${isAlive}" -eq $TRUE ]; then
  126. echo "$PIDNAME found running with processes: `pidof $PS`"
  127. else
  128. echo "$PIDNAME is NOT running."
  129. fi
  130. }
  131. removePIDFile(){
  132. if [ $1 ]; then
  133. if [ -f $1 ]; then
  134. rm -f $1
  135. fi
  136. else
  137. #Do default removal
  138. if [ -f $PIDSPATH/$PIDFILE ]; then
  139. rm -f $PIDSPATH/$PIDFILE
  140. fi
  141. fi
  142. }
  143. start() {
  144. log_daemon_msg "Starting $DESCRIPTION"
  145. isRunning
  146. isAlive=$?
  147. if [ "${isAlive}" -eq $TRUE ]; then
  148. log_end_msg $SCRIPT_ERROR
  149. else
  150. start-stop-daemon --start --quiet --chuid $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON \
  151. -- -c $NGINX_CONF_FILE
  152. setFilePerms
  153. log_end_msg $SCRIPT_OK
  154. fi
  155. }
  156. stop() {
  157. log_daemon_msg "Stopping $DESCRIPTION"
  158. isRunning
  159. isAlive=$?
  160. if [ "${isAlive}" -eq $TRUE ]; then
  161. start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE
  162. wait_for_pid 'removed' $PIDSPATH/$PIDFILE
  163. if [ -n "$try" ] ; then
  164. log_end_msg $SCRIPT_ERROR
  165. else
  166. removePIDFile
  167. log_end_msg $SCRIPT_OK
  168. fi
  169. else
  170. log_end_msg $SCRIPT_ERROR
  171. fi
  172. }
  173. reload() {
  174. configtest || return $?
  175. log_daemon_msg "Reloading (via HUP) $DESCRIPTION"
  176. isRunning
  177. if [ $? -eq $TRUE ]; then
  178. `killall -HUP $PS` #to be safe
  179. log_end_msg $SCRIPT_OK
  180. else
  181. log_end_msg $SCRIPT_ERROR
  182. fi
  183. }
  184. quietupgrade() {
  185. log_daemon_msg "Peforming Quiet Upgrade $DESCRIPTION"
  186. isRunning
  187. isAlive=$?
  188. if [ "${isAlive}" -eq $TRUE ]; then
  189. kill -USR2 `cat $PIDSPATH/$PIDFILE`
  190. kill -WINCH `cat $PIDSPATH/$PIDFILE.oldbin`
  191. isRunning
  192. isAlive=$?
  193. if [ "${isAlive}" -eq $TRUE ]; then
  194. kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
  195. wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
  196. removePIDFile $PIDSPATH/$PIDFILE.oldbin
  197. log_end_msg $SCRIPT_OK
  198. else
  199. log_end_msg $SCRIPT_ERROR
  200. log_daemon_msg "ERROR! Reverting back to original $DESCRIPTION"
  201. kill -HUP `cat $PIDSPATH/$PIDFILE`
  202. kill -TERM `cat $PIDSPATH/$PIDFILE.oldbin`
  203. kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
  204. wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
  205. removePIDFile $PIDSPATH/$PIDFILE.oldbin
  206. log_end_msg $SCRIPT_ok
  207. fi
  208. else
  209. log_end_msg $SCRIPT_ERROR
  210. fi
  211. }
  212. terminate() {
  213. log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"
  214. PIDS=`pidof $PS` || true
  215. [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
  216. for i in $PIDS; do
  217. if [ "$i" = "$PIDS2" ]; then
  218. kill $i
  219. wait_for_pid 'removed' $PIDSPATH/$PIDFILE
  220. removePIDFile
  221. fi
  222. done
  223. log_end_msg $SCRIPT_OK
  224. }
  225. destroy() {
  226. log_daemon_msg "Force terminating and may include self (via KILLALL) $DESCRIPTION"
  227. killall $PS -q >> /dev/null 2>&1
  228. log_end_msg $SCRIPT_OK
  229. }
  230. pidof_daemon() {
  231. PIDS=`pidof $PS` || true
  232. [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
  233. for i in $PIDS; do
  234. if [ "$i" = "$PIDS2" ]; then
  235. return 1
  236. fi
  237. done
  238. return 0
  239. }
  240. case "$1" in
  241. start)
  242. start
  243. ;;
  244. stop)
  245. stop
  246. ;;
  247. restart|force-reload)
  248. stop
  249. sleep 3
  250. start
  251. ;;
  252. reload)
  253. $1
  254. ;;
  255. status)
  256. status
  257. ;;
  258. configtest)
  259. $1
  260. ;;
  261. quietupgrade)
  262. $1
  263. ;;
  264. terminate)
  265. $1
  266. ;;
  267. destroy)
  268. $1
  269. ;;
  270. *)
  271. FULLPATH=/etc/init.d/$PS
  272. echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}"
  273. echo " The 'destroy' command should only be used as a last resort."
  274. exit 1
  275. ;;
  276. esac
  277. exit 0