123

Ubuntu サーバーのコマンド ラインで nginx サービスを再起動すると、nginx 構成ファイルにエラーがあるとサービスがクラッシュします。マルチサイト サーバーでは、構成エラーのないサイトも含め、すべてのサイトがダウンします。

これを防ぐために、最初に nginx 構成テストを実行します。

nginx -t

テストが正常に実行された後、サービスを再起動できました。

/etc/init.d/nginx restart

または、再起動せずに nignx サイト構成のみをリロードします。

nginx -s reload

再起動コマンドが構成テストの結果を条件とするこれら 2 つのコマンドを組み合わせる方法はありますか?

これをオンラインで見つけることができませんでした。これに関する公式ドキュメントはかなり基本的なものです。Linux の使い方がよくわからないので、探しているものが目の前にあるのか、それともまったく不可能なのかわかりません。

nginx v1.1.19 を使用しています。

4

7 に答える 7

49

実際、私の知る限り、構成が悪い場合、nginx は空のメッセージを表示し、実際には再起動しません。

それを台無しにする唯一の方法は、nginx を停止してから再起動することです。停止には成功しますが、開始には失敗します。

于 2013-09-03T09:43:43.067 に答える
40

構成テストが成功した場合にのみ、次のコマンドを使用して 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" を使用できます。

于 2014-01-24T16:55:50.347 に答える
9
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」などを使用します。

于 2016-10-17T21:36:28.607 に答える
3

シグナルを使用して nginx を制御できます。

ドキュメントによると、HUP シグナルを nginx マスター プロセスに送信する必要があります。

HUP - 構成の変更、変更されたタイム ゾーンへの対応 (FreeBSD および Linux のみ)、新しい構成での新しいワーカー プロセスの開始、古いワーカー プロセスの正常なシャットダウン

こちらのドキュメントを確認してください: http://nginx.org/en/docs/control.html

次のように、HUP シグナルを nginx マスター プロセス PID に送信できます。

kill -HUP $( cat /var/run/nginx.pid )

上記のコマンドは、から nginx PID を読み取ります/var/run/nginx.pid。デフォルトでは nginx pid が書き込まれます/usr/local/nginx/logs/nginx.pidが、設定でオーバーライドできます。をチェックnginx.configして、PID の保存場所を確認してください。

于 2014-07-07T08:55:38.703 に答える
1

少なくとも 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 $?
  ;;

since it callsservice nginx reloadの代わりにcall するだけでよいようです。restarttest_nginx_config

于 2014-02-26T15:53:21.010 に答える