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过滤端口号判断进程是否开启,效果更好。
备注:通过pid判断服务的启动与否,可能会导致stop指令执行结束后pid文件没有及时删除(有延迟),而这时进行start启动服务会报服务已启动(而不会真的启动服务)。这种情况会在开启服务后进行restart指令时出现。所以通过端口判断服务的开启与否会更稳定,效果更好...
脚本提供了Nginx所支持的6种进程管理信号中的4种启动用控制信号,同时额外附件了一个查看进程状态的功能。
脚本全文如下:[root@centos6 ~] cat /etc/init.d/nginx

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

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

Nginx启动脚本_第1张图片 Nginx启动脚本_第2张图片