upstart - Supervisord fork 计数 > 2(无法让 Supervisord 在启动时启动)

upstart - Supervisord fork 计数 > 2(无法让 Supervisord 在启动时启动)

我正在尝试使用 upstart,以便 Supervisord 在启动时自动启动。我的 Supervisord 处于虚拟环境中。

我已将其配置为使用 -n 参数在前台模式下运行,并且如果手动启动它可以工作但拒绝在启动时启动。

按照此处的指南操作 http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count

我发现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

一些问题:
* 有什么想法可以解释为什么它在启动时无法以前台模式启动?
* 我是否正确确定了 fork 的数量?
* 关于如何使用 upstart 启动 Supervisord 有什么更好的建议吗?

答案1

哦天哪...
我从这里开始走这条路:
如何在 Linux(Ubuntu)上自动启动 Supervisord
特别是这个答案 https://serverfault.com/a/115259/60345

哦,supervisord 的新贵太棒了......没问题

没有。可以手动启动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] 上停止

我想在另一个帖子中发布这个答案,但它被锁定了=(

相关内容