質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1562閲覧

PythonのtornadoをApacheでsupervisorで自動で再起動するようにしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2017/10/19 14:23

編集2017/10/19 14:38

LINUXで以下のような症状が発生しており困っております。

pythonのtornadoでwebアプリケーションを書いているのですが
このtornadoアプリを実運用するためにApacheでリバースプロキシを使って実行していますが
pythonのtornadoアプリケーション任意のポートで動かす際に
停止した時に自動で復帰させるsupervisorが自動で再起動しません。

例えば,pythonのtornadoアプリにシンタックスエラーがあった場合
通常ApacheがHTTPステータスコードの503エラーを出力しますが,シンタックスエラーを修正しても
Apacheは依然として503エラーを出力したままなのです。
その際になんとか復帰させようと,service supervisord restart
とsupervisorの再起動を行うと503コードを返していたApacheも復帰します。

詳細は以下となります。
まず
pythonのtornadoアプリケーションは以下のように任意のポートをlistenしています。

if __name__ == "__main__": app = make_app() app.listen(60012) tornado.ioloop.IOLoop.current().start()

そしてsupervisorの自動起動の設定ファイルは
[program:myPython]
command=/usr/local/python/bin/python3.6 /var/www/free.sample.com/public/index.py
process_name=myPython
autostart=true
autorestart=true
user=apache
stopasgroup=true
と上記のような設定にしています。
設定項目はググった結果の設定例を引用しているだけで実際
項目の意味はほとんど理解できていませんが...

Apacheのプロキシの設定は
ProxyPass / http://free.sample.com:60012/ retry=1 min=2 acquire=3000 timeout=60 keepalive=On
ProxyPassReverse / http://free.sample.com:60012/
上記の通りです。

apacheとsupervisorともに一度起動すると正しく動作します。
その後,何らかの原因で503を発生させると(スクリプトのシンタックスエラーなど)
コマンド> supervisorctl をたたくと以下のように出力されます。
myPython FATAL Exited too quickly (process log may have details)

さて,実現したいこととしては,
pythonのtornadoアプリケーションがシンタックスなどで503ステータスを返却したとしても
supervisorを自動で再起動するようにしたいです。

おそれいりますが お詳しい方ご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

起動してから終了するまでが早すぎると、無限に再起動→終了を繰り返してしまうため、そのような場合に、Exited too quickly で終了します。

このような場合、startsecsを指定してあげるとよいです。

例えば、設定ファイルに、startsecs=5などと設定すると、開始後5秒以内に終了した場合は自動起動しない、という設定になります。

もし、起動直後にシンタックスエラーで落ちるという設定でsupervisorの自動起動を試してにしているのであれば、GETが来たとき落ちるのようにすればよいのではないでしょうか。
質問者様ので例で言うと、これをものすごく短くすればよいのですが、現実的な運用ではないのかなと思います

また、
stdout_logfile=/var/log/supervisor/demo.log
の記述を追加するとログファイルに書き出されるようになりますので、そちらも参照してみてください。

投稿2017/10/20 06:35

kageyama_tanaka

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/25 11:19

ありがとうございます。 無事に,期待していた動作をするようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問