Nginx启动脚本

Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。因稳定性、丰富的功能、低资源消耗而闻名。
但Nginx本身不自带启动脚本,需要我们手动编写一份,现在网上所提供的大多数脚本都是有针对行的,可移植性很差。
大多数这样的脚本依赖于系统中functions函数,但该函数仅在个别系统中存在。
为了使脚本更加通用,以下编写的脚本可以很轻松的移植到各种Unix、Linux系统中,同时还兼容CentOS的chkconfig功能。
测试证明无需修改即可在CentOS、Ubuntu、FreeBSD上测试运行正常。
脚本的思路是通过nginx.pid文件来判断进程是否启动,当然如果你看了http://manual.blog.51cto.com/3300438/932958这篇文章,就可以通过awk过滤端口号判断进程是否开启,效果更好。
脚本提供了Nginx所支持的6种进程管理信号中的4种启动用控制信号,同时额外附件了一个查看进程状态的功能。
脚本全文如下:[root@centos6 ~] cat /etc/init.d/nginx

  1. #!/bin/sh
  2. #
  3. # Startup script for the Nginx
  4. # chkconfig: – 88 63
  5. # description: Nginx is a free,open-source,high-performance HTTP Server and reverse proxy.
  6. # program:/usr/local/nginx/sbin/nginx
  7. # config:/usr/local/nginx/conf/nginx.conf
  8. # pidfile:/usr/local/nginx/logs/nginx.pid
  9. # Synopsis:
  10. #        nginx [–help] [–version] {start|stop|restart|reload|status|update}
  11. # Define variable
  12. nginx=/usr/local/nginx/sbin/nginx
  13. pidfile=/usr/local/nginx/logs/nginx.pid
  14. PROGRAM=`basename $0`
  15. VERSION=1.0
  16. # Functions
  17. usage(){
  18.     echo “Usage: $PROGRAM [–help] [–version] {start|stop|restart|reload|status|update}”
  19. }
  20. version(){
  21.     echo “Version:$VERSION”
  22. }
  23. start(){
  24. if [ -e $pidfile ]
  25.    then
  26.     echo “Nginx already running…”
  27.    else
  28.     echo -e “Starting Nginx:\t\t\t\t\t\t\t\c”
  29.     /usr/local/nginx/sbin/nginx
  30.     echo -e “[ \c”
  31.     echo -e “\033[0;32mOK\033[0m\c”
  32.     echo -e ” ]\c”
  33.     echo -e “\r”
  34. fi
  35. }
  36. stop(){
  37. if [ -e $pidfile ]
  38.    then
  39.     echo -e “Stopping Nginx:\t\t\t\t\t\t\t\c”
  40.     kill -QUIT `cat ${pidfile}`
  41.     echo -e “[ \c”
  42.     echo -e “\033[0;32mOK\033[0m\c”
  43.     echo -e ” ]\c”
  44.     echo -e “\r”
  45.    else
  46.     echo “Nginx already stopped…”
  47. fi
  48. }
  49. reload(){
  50. if [ -e $pidfile ]
  51.    then
  52.     echo -e “Reloading Nginx:\t\t\t\t\t\t\c”
  53.     kill -HUP `cat ${pidfile}`
  54.     echo -e “[ \c”
  55.     echo -e “\033[0;32mOK\033[0m\c”
  56.     echo -e ” ]\c”
  57.     echo -e “\r”
  58.    else
  59.     echo “Nginx is not running…”
  60. fi
  61. }
  62. status(){
  63.     if [ -e $pidfile ]
  64.        then
  65.         PID=`cat $pidfile`
  66.         echo  “Nginx (pid $PID) is running…”
  67.        else
  68.         echo  “Nginx is stopped”
  69.     fi
  70. }
  71. update(){
  72. if [ -e $pidfile ]
  73.    then
  74.     echo -e “Updateing Nginx:\t\t\t\t\t\t\c”
  75.     kill -USR2 `cat ${pidfile}`
  76.     echo -e “[ \c”
  77.     echo -e “\033[0;32mOK\033[0m\c”
  78.     echo -e ” ]\c”
  79.     echo -e “\r”
  80.    else
  81.     echo “Nginx is not running…”
  82. fi
  83. }
  84. if [ $# -gt 0 ]
  85.    then
  86.     case $1 in
  87.         start)
  88.             start
  89.             ;;
  90.         stop)
  91.             stop
  92.             ;;
  93.         restart)
  94.             stop
  95.             start
  96.             ;;
  97.         reload)
  98.             reload
  99.             ;;
  100.         status)
  101.             status
  102.             ;;
  103.         update)
  104.             update
  105.             ;;
  106.         –help)
  107.             usage
  108.             ;;
  109.         –version)
  110.             version
  111.             ;;
  112.         *)
  113.             usage
  114.     esac
  115.    else
  116.     usage
  117. fi

如果你的系统使用的是CentOS或RedHat的系统,可以通过chkconfig将其设置为开机启动项。
[root@centos6 ~] chkconfig  –add  nginx
[root@centos6 ~] chkconfig  nginx  on
脚本运行效果如图:

丁丁历险丁丁历险

 

本文出自 “丁丁历险” 博客,请务必保留此出处http://manual.blog.51cto.com/3300438/948874

分享至
更多2
一键收藏,随时查看,分享好友!
 linuxsong、liuliu991、煮酒品茶
4人
了这篇文章
类别:Linux服务技术圈(0)┆阅读(166)┆评论(5) ┆ 推送到技术圈返回首页

文章评论

2012-08-01 10:32:30
写的非常Nice,学习了 ,这个版本显示的有点不用心。

2012-08-01 14:33:58
Very Nice!

2012-08-02 09:22:07
不错,这脚本比较直观,收藏备用了!

2012-08-02 09:47:14
通过rpm包安装nginx,是自带启动脚本的,在/etc/rc.d/init.d/目录下,就有nginx的启动目录,启动脚本如下:
#!/bin/sh
#
# nginx     Startup script for nginx
#
# chkconfig: – 85 15
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# description: nginx is a HTTP and reverse proxy server
#
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop nginx
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/nginx ]; then
. /etc/sysconfig/nginx
fi

prog=nginx
nginx=${NGINX-/usr/sbin/nginx}
conffile=${CONFFILE-/etc/nginx/nginx.conf}
lockfile=${LOCKFILE-/var/lock/subsys/nginx}
pidfile=${PIDFILE-/var/run/nginx.pid}
SLEEPMSEC=100000
RETVAL=0

start() {
echo -n $”Starting $prog: ”

daemon –pidfile=${pidfile} ${nginx} -c ${conffile}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $”Stopping $prog: ”
killproc -p ${pidfile} ${prog}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

reload() {
echo -n $”Reloading $prog: ”
killproc -p ${pidfile} ${prog} -HUP
RETVAL=$?
echo
}

upgrade() {
oldbinpidfile=${pidfile}.oldbin

configtest -q || return 6
echo -n $”Staring new master $prog: ”
killproc -p ${pidfile} ${prog} -USR2
RETVAL=$?
echo
/bin/usleep $SLEEPMSEC
if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
echo -n $”Graceful shutdown of old $prog: ”
killproc -p ${oldbinpidfile} ${prog} -QUIT
RETVAL=$?
echo
else
echo $”Upgrade failed!”
return 1
fi
}

configtest() {
if [ “$#” -ne 0 ] ; then
case “$1” in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
${nginx} -t -c ${conffile} $FLAG
RETVAL=$?
return $RETVAL
}

rh_status() {
status -p ${pidfile} ${nginx}
}

# See how we were called.
case “$1″ in
start)
rh_status >/dev/null 2>&1 && exit 0
start
;;
stop)
stop
;;
status)
rh_status
RETVAL=$?
;;
restart)
configtest -q || exit $RETVAL
stop
start
;;
upgrade)
upgrade
;;
condrestart|try-restart)
if rh_status >/dev/null 2>&1; then
stop
start
fi
;;
force-reload|reload)
reload
;;
configtest)
configtest
;;
*)
echo $”Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest}”
RETVAL=2
esac

exit $RETVAL

评论关闭。