利用BashShell编写Nginx服务控制脚本

使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的服务控制脚本。

可以使用的选项有:

start     启动

stop     停止

reload   重载

restart    重启

status    状态

test    检查配置文件

1、创建脚本文件并添加执行权限

# touch /etc/init.d/nginx
# chmod +x /etc/init.d/nginx

2、编写脚本内容

  1 #!/bin/bash
  2 # chkconfig: - 85 15
  3 # description: Nginx server control script
  4 # processname: nginx
  5 # config file: /usr/local/nginx/conf/nginx.conf
  6 # pid file: /usr/local/nginx/logs/nginx.pid
  7 #
  8 # eastmoney public tools
  9 # version: v1.0.0
 10 # create by XuHoo, 2016-9-14
 11 #
 12
 13 # source function library
 14 . /etc/rc.d/init.d/functions
 15
 16 NGINX_NAME="nginx"
 17 NGINX_PROG="/usr/local/sbin/nginx"
 18 NGINX_PID_FILE="/usr/local/nginx/logs/nginx.pid"
 19 NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 20 NGINX_LOCK_FILE="/var/lock/subsys/nginx.lock"
 21
 22 # check current user
 23 [ "$USER" != "root" ] && exit 1
 24
 25 start() {
 26     status
 27         if [[ $? -eq 0 ]]; then
 28             echo $"Nginx (PID $(cat $NGINX_PID_FILE)) already started."
 29             return 1
 30         fi
 31     echo -n $"Starting $NGINX_NAME: "
 32         daemon $NGINX_PROG -c $NGINX_CONF_FILE
 33         retval=$?
 34         echo
 35     [ $retval -eq 0 ] && touch $NGINX_LOCK_FILE
 36     return $retval
 37 }
 38
 39 stop() {
 40     status
 41         if [[ $? -eq 1 ]]; then
 42             echo "Nginx server already stopped."
 43             return 1
 44         fi
 45     echo -n $"Stoping $NGINX_NAME: "
 46         killproc $NGINX_PROG
 47         retval=$?
 48         echo
 49     [ $retval -eq 0 ] && rm -f $NGINX_LOCK_FILE
 50     return $retval
 51 }
 52
 53 restart() {
 54     stop
 55         sleep 1
 56     start
 57     retval=$?
 58     return $retval
 59 }
 60
 61 reload() {
 62     echo -n $"Reloading $NGINX_NAME: "
 63         killproc $NGINX_PROG -HUP
 64         retval=$?
 65         echo
 66     return $retval
 67 }
 68
 69 status() {
 70     netstat -anpt | grep "/nginx" | awk ‘{print $6}‘ &> /dev/null
 71         if [[ $? -eq 0 ]]; then
 72             if [[ -f $NGINX_LOCK_FILE ]]; then
 73                 return 0
 74             else
 75                 return 1
 76             fi
 77         fi
 78     return 1
 79 }
 80
 81 _status() {
 82     status
 83         if [[ $? -eq 0 ]]; then
 84             state=`netstat -anpt | grep "/nginx" | awk ‘{ print $6 }‘`
 85             echo $"Nginx server status is: $state"
 86         else
 87             echo "Nginx server is not running"
 88         fi
 89 }
 90
 91 test() {
 92     $NGINX_PROG -t -c $NGINX_CONF_FILE
 93         retval=$?
 94     return $retval
 95 }
 96
 97 case "$1" in
 98     start)
 99         start
100         ;;
101     stop)
102         stop
103         ;;
104     reload)
105         reload
106         ;;
107     restart)
108         restart
109         ;;
110     status)
111         _status
112         ;;
113     test)
114         test
115         ;;
116     *)
117         echo "Usage: { start | stop | reload | restart | status | test }"
118         exit 1
119 esac

3、将脚本添加到系统服务并设置开机启动

# chkconfig --add nginx
# chkconfig --level 3 nginx on

4、测试脚本是否能够执行

运行命令: service nginx start 或 /etc/init.d/nginx start

时间: 2024-08-08 00:20:35

利用BashShell编写Nginx服务控制脚本的相关文章

编写Nginx服务控制脚本

./configure --user=www --group=www --prefix=/application/nginx --sbin-path=/application/nginx/sbin --conf-path=/application/nginx/conf/nginx.conf --error-log-path=/application/nginx/logs/error.log --http-log-path=/application/nginx/logs/access.log --

运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

运维经验分享(七)-- Linux Shell之ChatterServer服务控制脚本第三次优化

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

运维经验分享(五)-- 改进的java进程管理的服务控制脚本

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

Linux Shell之ChatterServer服务控制脚本二次优化

最近开发人员提出新的需求,想将ChatterServer服务控制脚本放到ChatterServer根目录下的bin目录下,并向一次性可以部署多个实例,因此这一个需求引发了多个改变: 1.不再使用service进行控制,仍然保留status.start.stop和restart功能 2.BASEDIR不再使用绝对路径而要使用相对路径,例如BASEDIR=.. 3.SERVICEPORT要从ChatterServer根目录下的conf目录中的文件中读取 4.日志目录logs将不再手动创建,控制脚本需

Linux Shell之ChatterServer服务控制脚本

本脚本是ChatterServer的服务控制脚本,即能通过service命令来控制ChatterServer的启动.停止.重新启动以及状态查看,就像mysql有/etc/init.d/mysql或/etc/init.d/mysqld一样,只是这个ChatterServer的服务控制脚本写起来更加困难,有些信息的捕获和判断更加复杂,原因还是主要与ChatterServer的运行方式和启动过程中发生的一些事情有关,这个在脚本的注释中已经充分的标注清楚了. 由于ChatterServer运行在Ubun

利用chkconfig 管理启动服务及脚本一个坑点

利用chkconfig 管理启动服务及脚本一个坑点 在启动脚本头部: #!/bin/bash #chkconfig:  2345 63 90 #description: this is a example 彩色部分是chkconfig管理的要点,必须写入,同时绿色部分代表所引用的运行级别,×××代表启动顺序,越小越靠前[00-99],蓝色部分代表关闭顺序,越小越靠前[00-99],我为了不影响,用了一个100,报错了,所以是个坑点,网络上也没有相关说明.是自己试出来的. 其实启动就相当于开机自动

为程序编写Service服务管理脚本

SaltStack通过Service方式管理服务,对于通用的服务,如mysql.apache.php等,自带service服务管理脚本,SaltStack可以方便管理.但是对于一些公司自有的服务,可能这些服务在开发之初,并没有考虑日后会采用Service脚本进行服务管理,为了统一Salt对服务的管理,我采用的方式是为每一个程序编写Service脚本. 这里主要注意以下两个问题: 1.这里有部分机器的优化,放在/etc/profile和/root/.bashrc中,而这两个文件在用户登陆的时候,会

利用shell开发rsync服务启动脚本

利用shell函数开发rsync服务启动脚本,之前的不够专业 #!/bin/bash #chkconfig: 2345  20 80                       #这两行加入kconfig #description: Saves and restores system entropy  pool source /etc/init.d/functions    #调用标准的函数库 aa() {   echo "plz one canshu"   exit 5 } bb()