web-dev-qa-db-ja.com

Ubuntuで設定テストが成功した後にのみnginxを再起動するにはどうすればよいですか?

Ubuntuサーバーのコマンドラインでnginxサービスを再起動すると、nginx設定ファイルにエラーがあるとサービスがクラッシュします。マルチサイトサーバーでは、これにより、構成エラーがないサイトでもすべてのサイトが停止します。

これを防ぐために、私は最初にnginx設定テストを実行します。

nginx -t

テストが成功したら、サービスを再開できます。

/etc/init.d/nginx restart

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

nginx -s reload

Restartコマンドが構成テストの結果を条件としている2つのコマンドを組み合わせる方法はありますか?

私はこれをオンラインで見つけることができませんでした、そして 公式文書 はかなり基本的なものです。私はLinuxについての私のやり方をあまりよく知らないので、探しているものが私の目の前にあるのか、それとも不可能なのか、私にはわかりません。

私はnginx v1.1.19を使っています。

95
jan

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

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

43

Nginx 1.8.0以降、正しい解決策は

Sudo nginx -t && Sudo service nginx reload

バグのため、設定ファイルにエラーがあっても configtestは常にゼロの終了コードを返します であることに注意してください。

64
Dan Dascalescu

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

38
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"などのコマンドを使います。

8
MechanisM

/etc/init.d/nginx reloadSudo service nginx reloadを使ってリロードすることができます

nginx -tが何らかのエラーを投げたら、それはリロードしません

そのため、&&を使用して両方を同時に実行します。

好き

nginx -t && /etc/init.d/nginx reload

2
gokul kandasamy

シグナルを使って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の保存場所を確認してください。

2
hcristea

少なくとも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を呼び出すだけでよいのです。

1
Daenney