许多时候,我们手动安装的 nginx 都是不能用 service 等方式启动的,虽然也可以加入脚本到/etc/rc.local(redhat7 以后的版本需要 chmod +x /etc/rc.local)中让其执行!比如
[root@example ~]# echo “/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf” >> /etc/rc.local
但是还是有许多执拗的人喜欢用 service 命令来启动!这里就提供一个脚本可以将 nginx 服务加入到 service 方式启动。新建一个 nginx 文件
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. test "$NETWORKING" = "no" && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" test -f /etc/sysconfig/nginx && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx start() { test -x $nginx || exit 5 test -f $NGINX_CONF_FILE || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo test $retval -eq 0 && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo test $retval -eq 0 && rm -f $lockfile return $retval killall -9 nginx } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status > /dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload| configtest}" exit 2 esac
然后赋予执行权限并添加开启启动等等
[root@example ~]# cp nginx /etc/init.d/ [root@example ~]# chmod 755 /etc/init.d/nginx [root@example ~]# chkconfig --add nginx
当我们对 Nginx 的配置文件做过一些更改后,希望在不中断当前服务的情况下,进行
一个平滑的重启,可以使用如下命令。
[root@example ~]# service nginx reload
脚本中的 reload 函数会首先对配置文件做一个语法格式的检查,使用的是如下的命令
[root@example init.d]# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
当语法格式检查通过后,会对 Nginx 发出一个标记为1或者说是 HUP 的信号源,Nginx 收到后会关闭旧进程,打开新进程,如果有进程正在为一个用户提供服务,则会等待
这次服务结束。
当然我们也可以使用
service nginx restart
的方式去重启服务。它会先尝试以比较温柔
的方式去结束进程,如果有进程没有被结束掉,那么 killall -9 nginx 。
关于停止 Nginx ,直接
service nginx stop
即可,或者 kill 死所有的 Nginx 进程。