Ubuntuサーバーのコマンドラインでnginxサービスを再起動すると、nginx設定ファイルにエラーがあるとサービスがクラッシュします。マルチサイトサーバーでは、これにより、構成エラーがないサイトでもすべてのサイトが停止します。
これを防ぐために、私は最初にnginx設定テストを実行します。
nginx -t
テストが成功したら、サービスを再開できます。
/etc/init.d/nginx restart
またはのみ再起動せずにnignxサイト設定をリロードします。
nginx -s reload
Restartコマンドが構成テストの結果を条件としている2つのコマンドを組み合わせる方法はありますか?
私はこれをオンラインで見つけることができませんでした、そして 公式文書 はかなり基本的なものです。私はLinuxについての私のやり方をあまりよく知らないので、探しているものが私の目の前にあるのか、それとも不可能なのか、私にはわかりません。
私はnginx v1.1.19を使っています。
実際、私の知る限りでは、nginxは空のメッセージを表示し、設定が悪いと実際には再起動しません。
それを台無しにする唯一の方法は、nginxを停止してから再起動することです。それは停止することに成功しますが、開始に失敗します。
Nginx 1.8.0以降、正しい解決策は
Sudo nginx -t && Sudo service nginx reload
バグのため、設定ファイルにエラーがあっても configtest
は常にゼロの終了コードを返します であることに注意してください。
構成テストが成功した場合にのみ、Nginx(バージョン1.5.9)をリロードするために次のコマンドを使用します。
/etc/init.d/nginx configtest && Sudo /etc/init.d/nginx reload
これを頻繁に行う必要がある場合は、エイリアスを使用することをお勧めします。私は以下を使います:
alias n='/etc/init.d/nginx configtest && Sudo /etc/init.d/nginx reload'
ここでのトリックは、最初のコマンドが成功した場合にのみ2番目のコマンドを実行する "&&"によって行われます。あなたは こちら "&&"演算子の使い方のより詳細な説明を見ることができます。
本当にサーバーを再起動したい場合は、 "reload"の代わりに "restart"を使用できます。
alias nginx.start='Sudo nginx -c /etc/nginx/nginx.conf'
alias nginx.stop='Sudo nginx -s stop'
alias nginx.reload='Sudo nginx -s reload'
alias nginx.config='Sudo nginx -t'
alias nginx.restart='nginx.config && nginx.stop && nginx.start'
alias nginx.errors='tail -250f /var/logs/nginx.error.log'
alias nginx.access='tail -250f /var/logs/nginx.access.log'
alias nginx.logs.default.access='tail -250f /var/logs/nginx.default.access.log'
alias nginx.logs.default-ssl.access='tail -250f /var/logs/nginx.default.ssl.log'
そして "nginx.reload"などのコマンドを使います。
/etc/init.d/nginx reload
とSudo service nginx reload
を使ってリロードすることができます
nginx -t
が何らかのエラーを投げたら、それはリロードしません
そのため、&&を使用して両方を同時に実行します。
好き
nginx -t && /etc/init.d/nginx reload
シグナルを使ってnginxを制御できます。
資料によると、あなたはnginxマスタープロセスにHUPシグナルを送る必要があります。
HUP - 設定の変更、変更されたタイムゾーンに追いつく(FreeBSDとLinuxのみ)、新しい設定で新しいワーカープロセスを開始、古いワーカープロセスを適切にシャットダウン
ここでドキュメントを確認してください。 http://nginx.org/en/docs/control.html
あなたはこのようにnginxマスタープロセスPIDにHUPシグナルを送ることができます:
kill -HUP $( cat /var/run/nginx.pid )
上記のコマンドは/var/run/nginx.pid
からnginx PIDを読み取ります。デフォルトではnginx pidは/usr/local/nginx/logs/nginx.pid
に書かれていますが、configで上書きすることができます。 nginx.config
をチェックして、PIDの保存場所を確認してください。
少なくともDebianでは、nginx起動スクリプトは以下のことを行うリロード機能を持っています。
reload)
log_daemon_msg "Reloading $DESC configuration" "$NAME"
test_nginx_config
start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
--oknodo --exec $DAEMON
log_end_msg $?
;;
service nginx reload
を呼び出すので、restart
ではなくtest_nginx_config
を呼び出すだけでよいのです。