nginx启停脚本
安装nginx时,源码包中未带官方的启动脚本,也就无法使用service nginxd start这种启动方式,查了下资料自己写了一个:
#!/bin/bash #@version: 0.0.
#@author: lifafu
#@file:
#@time: // :
#@company: source /etc/profile #加载系统环境变量
source $HOME/.bash_profile #加载用户环境变量
#set -o nounset #引用未初始化变量时终止执行,也可以set -u
#set -o errexit #执行任何语句返回非0状态时终止执行,也可以set -e # chkconfig: -
# 虽然前面带#号,是注释,但要用chkconfig命令注册开机启动服务器的话,该句必不可少,格式也不能错!
# 3个chkconfig参数的含义:
# x:是指定该脚本在哪个系统启动级别下运行,比如你需要在3,,5上运行,那么第二位就设置成345,我这里用的是”-”,代表在2,,,5上都运行
# y:系统启动时,服务启动顺序,需要注意的是,有的程序依赖与别的程序的话,启动顺序就要注意了,比如A程序的启动依赖于B程序的启动,那么A程序的这个值一定要比B程序大
# z:系统终止时,服务终止顺序 # description: Nginx is a high-performance web and proxy server.
# 该句也必不可少,理由同上,你程序的描述和简介,而非本启动脚本 #设置变量
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
nginx_lock=/var/lock/subsys/nginx #保存退出状态的变量,初始值为0(在linux一般0表示成功,表示OK,非0表示异常,不OK)
RETYAL= # 设置程序名称
prog="nginx" # Source function library.在当前shell中运行的函数库文件
# 在functions中定义了很多函数,在这里可以调用,系统提供的函数文件,这里面实现了很多函数和环境变量,比如start的时候,红色的字显示OK就是这个文件的功劳
. /etc/rc.d/init.d/functions # Source network configuration.加载网络配置
. /etc/sysconfig/network # Check that networking is up.
[ ${NETWORKING} = "no" ] && exit # 定义启动函数
start() {
# 判断程序是否存在,否则异常退出
[ -x $nginxd ] || { echo “FATAL: No such programme”;exit ; } # 判断配置文件是否存在,否则异常退出
[ -f $nginx_config ] || { echo “FATAL:Config file does not exist”;exit ; } # 判断程序是否运行,否则异常退出
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit
fi # 判断lock文件是否存在,否则异常退出
if [ -e $nginx_lock ];then
echo "nginx lock file does exist...."
exit
fi # 显示信息,依赖于. /etc/rc.d/init.d/functions
echo -n $"Starting $prog:" # 创建pid文件夹
dir=$(dirname $nginx_pid)
[ -d $dir ] || mkdir -p $dir # 调用functions里的daemon函数来启动nginx,daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序
daemon --pidfile $nginx_pid $nginxd -c ${nginx_config} # 把daemon函数调用的结果保存到RETVAL里
RETVAL=$?
echo # 判断RETVALR值,如果是0执行成功,则生成锁文件,锁文件主要用来判断程序是否运行
[ $RETVAL = ] && touch $nginx_lock #终止函数,并返回$RETVAL的值,通常用于函数的结束, 本身这段代码也是个函数,所以我们也要返回,返回RETVAL的值
return $RETVAL
} # 定义停止函数
stop() {
echo -n $"Stoping $prog:" #killproc也在. /etc/rc.d/init.d/functions里面定义
killproc -p $nginx_pid $prog
RETVAL=$?
echo
[ $RETVAL = ] && rm -f $nginx_lock $nginx_pid
} reload() {
echo -n $"Reloading $prog:"
#kill -HUP `cat ${nginx_pid}`
killproc -p $nginx_pid $prog -HUP
RETVAL=$?
echo
} #See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
#status在. /etc/rc.d/init.d/functions里有定义
status)
status $prog
RETVAL=$?
;;
#输入其他内容提示以下内容
*)
echo $"Usage:$prog{start|stop|restart|reload|status|help}"
exit
esac
exit $RETVAL
保存为nginxd,复制到/etc/init.d/中并赋予执行权限就可以使用service nginxd start等命令了;
如果需要加入开机启动:chkconfig --add nginxd;chkconfig nginxd on;
启停程序也可以使用类似的方式自己编写启动脚本,不过这种方式还是有缺陷,就是必须使用root用户运行这类脚本。
nginx启停脚本的更多相关文章
- Linux 程序启停脚本
start.sh #!/bin/sh java -jar ./program.jar & echo $! > /var/run/program.pid stop.sh #!/bin/sh ...
- linux下的启停脚本
linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...
- nginx 启停命令
nginx 启停配置 #!/bin/sh # # nginx Startup script for nginx # # chkconfig: - 85 15 # processname: nginx ...
- case编写的httpd简单启停脚本
case编写的httpd简单启停脚本 #!/bin/bash HTTPD="/etc/init.d/httpd" . /etc/init.d/functions case &quo ...
- Oracle EBS R12的启停脚本
以下脚本用root用户登录执行: 一.DB启停使用EBS提供的脚本ebs_start.shsu - oraprod -c "/d01/oracle/PROD/db/tech_st/10.2. ...
- Oracle BIEE启停脚本
作为BI的开发人员,经常启停BI服务在所难免,启动的过程又比较长,命令需要不同目录切换,简直烦死人呢, 特意整理了linux中的启动脚本,将以下脚本存成biee.sh,后面的过程就相当简单了, 启动: ...
- python启停脚本的编写
先占个位置,打算记录一下启停python 的脚本start.sh,stop.sh的写法. 内容包括启动python脚本的方式,日志的重定向,获取进程id,以及杀掉进程. 参考文章: http://bl ...
- mysql自己编写启停脚本
一.场景 在实际生产环境中要求相对较高的企业对于root权限管控相对比较高,故而很多软件并非安装在root用户下(当然root用户权限也可管理,但正常情况下root权限并不会给业务使用方,而会给一个普 ...
- liunx weblogic服务启停脚本
#!/bin/bash #sh xx.sh start xx项目 例如:sh autoWeblogic.sh start bius #经测试发现weblogic 启动大概需要完全启动成功35秒左右 停 ...
随机推荐
- OpenSearch最新功能介绍
摘要:阿里云开放搜索(OpenSearch)是一款结构化数据搜索托管服务,其能够提供简单.高效.稳定.低成本和可扩展的搜索解决方案.OpenSearch以平台服务化的形式,将专业搜索技术简单化.低门槛 ...
- 基于aop的日志记录方式实现
说明 最近有个项目需要增加日志记录功能,因为这个项目原来是基于spring开发的,在查阅了相关资料以后,我采用了spring aop的方式实现该需求,然后就有了本篇文章. 思路 我这边需求是这样的:要 ...
- delphi 多线程编程
开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.先试试这个: procedure TForm1.Button1Click(Sender: TObject); var i: ...
- 如何获取监听iframe src属性的变化进行后续操作
应用场景,当iframe内发生点击事件内容改变时,如果我们想获取变化后的iframe的 src 属性值,就可以使用如下方式去获取 <iframe id="taobaoOrder&quo ...
- continuation line under-indented for visual indent
continuation line under-indented for visual indent 问题:使用flake8检验代码规范时报错:continuation line under-inde ...
- CodeForces1249E-By Elevator or Stairs?-好理解自己想不出来的dp
Input The first line of the input contains two integers nn and cc (2≤n≤2⋅105,1≤c≤10002≤n≤2⋅105,1≤c≤1 ...
- HDU 5251 矩形面积 (旋转卡壳)
2015年百度之星程序设计大赛 - 初赛(1) 1006 比赛链接:2015年百度之星程序设计大赛 - 初赛(1) 题目链接:HDU 5251 Problem Description 小度熊有一个桌面 ...
- 基础补充(四)——流程控制之if、while、for,break与continue
流程控制 一.流程控制之if……else…… if 条件1: 缩进的代码块 elif 条件2: 缩进的代码块 elif 条件3: 缩进的代码块 ...... else: 缩进的代码块 二.流程控制之 ...
- VC++ 2010 创建高级Ribbon界面详解(3)
3.工具栏 在传统的菜单式界面中,工具栏作为菜单的有益补充,被广泛使用.我们通过将一些常用命令放置到工具栏上,可以让用户直观而快速地访问到常用功能,提高了效率.在Ribbon界面中,工具栏得到了进一步 ...
- 深入理解JAVA虚拟机原理之Dalvik虚拟机(三)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 本文是Android虚拟机系列文章的第三篇,专门介绍Andorid系统上曾经使用 ...