2013-09-03 6 views
73

nginxの設定ファイルにエラーがあるときに私はUbuntuのサーバのコマンドラインでnginxのサービス、サービスのクラッシュを再起動します。マルチサイトサーバーでは、設定エラーのないサイトも含め、すべてのサイトが削除されます。これを防止するためにubuntuで設定テストが成功した後に限り、nginxを再起動するにはどうしたらいいですか?

、私は最初のnginxの設定・テストを実行します。

nginx -t 

テストが成功走った後、私はサービス

/etc/init.d/nginx restart 

またはのみnignxサイトのconfigsをリロードを再起動することができます再起動なし

nginx -s reload 

ありますかrestartコマンドがconfigテストの結果に条件付きである場合、これらの2つのコマンドを組み合わせる方法はありますか?

私はこのオンラインを見つけることができませんでしたし、この上official documentationはかなり基本的なものです。私はLinux上で自分のやり方をよく知っていないので、探しているものが私の目の前にあるのか、まったくできないのか分からない。

私はこの上の任意のヘルプは高く評価されnginxののv1.1.19

を使用しています。私の知る限りでは、nginxのは、空のメッセージを示すだろうと設定が悪い場合、それは実際に再起動しません

+0

何のnginxの-tのリターン・ステータスをチェックする小さなシェルスクリプトについて($で?)とは、に応じて、再起動を行います戻り状態? – TeTeT

答えて

36

は実際に、それを台無しにする唯一の方法は、nginxの停止を行うことである再起動し、それが成功するでしょう停止するが、開始に失敗する。

+0

あなたは何のバージョンのnginxについて話していますか?私はv 1.1.19で作業しており、設定ファイルのエラーに関係なく再起動しようとします。それは問題があることを私に通知するが、それはすでに遅すぎる – jan

+5

私はちょうどそれをテストした、私のラップトップはnginx 1.2を持っていると私は説明したように働いた、私のVPSはあなたのような1.1.19を持って、あなたの質問に記載されている通りです。だから私はこれが1.2で処理されたと思います –

+0

素晴らしい!それを私のために考えてくれてありがとう。私は質問を開いたままで誰もnginxの回答がないかどうかを確認します。 jan

36

私は設定のテストが成功した場合にのみ、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番目のコマンドを実行し、「& &」によって行われます。あなたは「& &」演算子の使用のhereより詳細な説明を見ることができます。

あなたが本当にサーバを再起動する場合は、代わりに「リロード」の「再起動」を使用することができます。

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 $? 
    ;; 

は、あなたがする必要があると思い、すべてのように思えるそれはtest_nginx_configを呼び出すので、呼び出しservice nginx reload代わりのrestartです:

+0

nginx 1.4.2に気をつけてください。 'pkill -1 nginx'を見つけました(事実上、私のinit.d/nginx reloadは)設定が失敗し、誤って成功します。自分のバージョンを確認してください。 – KCD

+2

これは私のためには機能しません。両方のコマンドは、テストが失敗しても実行されます。 –

+1

[configtestは常にゼロ終了コードを返します](http://trac.nginx.org/nginx/ticket/763)、少なくともnginx 1.8.0では。代わりに 'nginx -t'を使用してください。 –

1

は、少なくともDebianの上でnginxの起動スクリプトはありませんリロード機能を持っています。

+0

'service nginx reload'は、設定がOKであるかどうか、または再ロードされたかどうかの表示を表示しません。 –

+0

その場合、 'test_nginx_config'は何をしますか? – Daenney

+0

私はどちらもポイントがあると思います。 'service nginx reload'で十分ですが、stderrの出力をキャプチャしてトラブルシューティングのためにスクリプトに戻すことができます。 'nginx -t'は、どのファイルに無効なパラメータがあってどの行にあるかを示します。 – anastymous

2

あなたはnginxのを制御するための信号を使用することができます。

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

HUP - 、構成を変更(のみFreeBSDとLinux用)変更されたタイムゾーンに追いついて、新しい設定で新しいワーカープロセスを開始し、古い労働者の正常なシャットダウンを処理し

マニュアルを確認してくださいここに:http://nginx.org/en/docs/control.html

あなたはこのように、マスター・プロセスPIDをnginxのためにHUPシグナルを送ることができます。

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

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

42

、正解が原因バグ、configtest always returns a zero exit codeに設定ファイルにエラーがある場合でもこと

sudo nginx -t && sudo service nginx reload 

注あります。その後、

+2

nginx -t && sudo nginx -s reload – MechanisM

+2

@MechanisM:sudoなしの 'nginx -t'は、許可エラーのためにほぼ確実に失敗します。 –

+0

ほとんどの場合、リロードの最後の部分を表示したかったのです。私の場合は、カスタムnginxをコンパイルしていて、/etc/init.dにもスクリプトがないので、私の場合は "service nginx reload"は何もしません – MechanisM

4
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」など。

関連する問題