我有两个问题:
- 之间有区别吗:
nginx -s reload
和pkill -HUP -F nginx.pid
- 观察 Nginx conf 文件并在更改时测试 conf 文件(
nginx -t
)的最简单方法是什么,如果它通过重新加载 Nginx。这可以通过runit
主管或像主管这样的流程经理来完成吗?
我有两个问题:
nginx -s reload
和pkill -HUP -F nginx.pid
nginx -t
)的最简单方法是什么,如果它通过重新加载 Nginx。这可以通过runit
主管或像主管这样的流程经理来完成吗?#!/bin/bash
# NGINX WATCH DAEMON
#
# Author: Devonte
#
# Place file in root of nginx folder: /etc/nginx
# This will test your nginx config on any change and
# if there are no problems it will reload your configuration
# USAGE: sh nginx-watch.sh
# Set NGINX directory
# tar command already has the leading /
dir='etc/nginx'
# Get initial checksum values
checksum_initial=$(tar --strip-components=2 -C / -cf - $dir | md5sum | awk '{print $1}')
checksum_now=$checksum_initial
# Start nginx
nginx
# Daemon that checks the md5 sum of the directory
# ff the sums are different ( a file changed / added / deleted)
# the nginx configuration is tested and reloaded on success
while true
do
checksum_now=$(tar --strip-components=2 -C / -cf - $dir | md5sum | awk '{print $1}')
if [ $checksum_initial != $checksum_now ]; then
echo '[ NGINX ] A configuration file changed. Reloading...'
nginx -t && nginx -s reload;
fi
checksum_initial=$checksum_now
sleep 2
done
至少在 Unix 上,HUP
由于声明代码,“重新加载”动作和信号都被视为一个
ngx_signal_t signals[] = {
{ ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
"SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
"reload",
ngx_signal_handler },
在src/os/unix/ngx_process.c
. 在ngx_signal_handler()
相同的通用代码中
case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
ngx_reconfigure = 1;
action = ", reconfiguring";
break;
被执行,它为一个共同的重新配置做准备。
要在修改文件时触发操作,您可以创建一个crontab并确定检查周期,或者使用inotifywait。
要确定是否nginx -t
出错,请检查 bash 文件中的返回码,$?
nginx -t
if [ $? -eq 0 ] then;
nginx -s reload
fi
注意:您也可以使用service nginx reload
(请参阅此处的返回码检查示例)