我正在尝试使用 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] 上停止
我想在另一个帖子中发布这个答案,但它被锁定了=(