私は、起動時に supervisord が自動的に起動するように upstart を使用しようとしています。私の supervisord は仮想環境にあります。
-n パラメータを使用してフォアグラウンド モードで実行するように構成しましたが、手動で起動した場合は動作しますが、起動時に起動を拒否します。
こちらのガイドに従ってください http://upstart.ubuntu.com/cookbook/#フォークカウントを確立する方法
supervisord が 37 回フォークしていることがわかりました。
> ~/projects/bleh_app$ sudo strace -o /tmp/strace.log -fFv /home/bleh/py_venvs/supe/bin/supervisord -c /home/bleh/projects/bleh_app/supervisord/supervisord.conf &
[1] 5662
> ~/projects/bleh_app$ ps -ef | grep strace
root 5662 5447 0 21:02 pts/0 00:00:00 sudo strace -o /tmp/strace.log -fFv /home/bleh/py_venvs/supe/bin/supervisord -c /home/bleh/projects/bleh_app/supervisord/supervisord.conf
root 5663 5662 36 21:02 pts/0 00:00:03 strace -o /tmp/strace.log -fFv /home/bleh/py_venvs/supe/bin/supervisord -c /home/bleh/projects/bleh_app/supervisord/supervisord.conf
bleh 5703 5447 0 21:02 pts/0 00:00:00 grep --color=auto strace
> ~/projects/bleh_app$ sudo killall -9 strace
[1]+ Exit 137 sudo strace -o /tmp/strace.log -fFv /home/bleh/py_venvs/supe/bin/supervisord -c /home/bleh/projects/bleh_app/supervisord/supervisord.conf
> ~/projects/bleh_app$ sudo egrep "\<(fork|clone)\>\(" /tmp/strace.log | wc | awk '{print $1}'
37
いくつか質問があります:
* 起動時にフォアグラウンド モードで起動しない理由について何か考えはありますか?
* フォークの数を正しく決定していますか?
* upstart で supervisord を起動する方法について、より良い提案はありますか?
答え1
ああ、
ここからこの道を歩み始めたんだ:
Linux (Ubuntu) で supervisord を自動的に起動する方法
そして具体的にはこの答え
https://serverfault.com/a/115259/60345
「ああ、スーパーバイザーにとっては素晴らしい新興企業だ...問題ない「
いいえ. supervisord を手動で問題なく起動できますが、起動時に自動的に起動することはできません。デバッグすると、supervisord が起動したように見えますが、すぐに SIGTERM が送信されて強制終了します。フォアグラウンドで実行されているためかどうかはわかりません。
上記の質問は、もともと、expect fork または daemon で実行できるかどうかを確認するためのものでした (これはわかりませんでした)
8時間後に私はこれを見つけた
http://upstart.ubuntu.com/cookbook/#runlevels
基本的に、upstart conf ファイルは次のようになります。
description "supervisord"
start on (filesystem and static-network-up)
stop on runlevel [!2345]
respawn
exec /<path to>/supervisord -n -c /<path to>/supervisord.conf
特に注意すべき点:
ランレベル [!2345] での停止
と
ランレベル [!345] での停止
この回答を他のスレッドに投稿したかったのですが、ロックされています =(