回答
supervisord
不直接支持依赖关系。您的选项改为:
使用优先级。将
priority
设置为A
的值较低,它将在B
之前启动,并在B
之后关闭。为priority
的默认值是999
。如果您将两个程序放入一个组中,那么您可以让它们一起启动和停止它们,优先级调节它们的启动和停止顺序。
写一个event listener侦听
PROCESS_STATE
STARTING
至 -RUNNING
过渡和A
STOPPING
事件,然后指示supervisord
开始,并根据这些事件停止B
。有A
自动启动,但B
禁用。自动启动,那么该事件处理程序来控制它。
我的理解是,上面的“优先级”方法很可能无法按预期工作。 Supervisord确实会按顺序启动进程,但例如[它不会等待进程A在开始进程B之前完全启动](https://github.com/Supervisor/supervisor/issues/122)(即,supervisord将忽略“startsecs”参数)。相反,它会在A之后立即启动B,在很多情况下,B不会满足你的要求。这种行为[已于2012年报告,但截至2014年仍未修复](https://github.com/Supervisor/supervisor/issues/122)。 –
@miguno:那么你的选择是使用事件监听器。 –
如果你想走捷径,并跳过阅读文档有关event listeners并跳过修改你的计划,使他们了解事件,则:直接
启动程序B
(取决于A
),而不是,你可以启动休眠,直到A
已经启动一个bash脚本,然后开始B
。举例来说,如果你有一个PostgreSQL数据库和服务器不应该PostgreSQL的前开始:
[program:server]
autorestart=true
command=/.../start-server.sh
[program:postgres]
user=postgres
autorestart=true
command=/usr/lib/postgresql/9.3/bin/postgres ...
然后里面start-server.sh
:
#!/bin/bash
# Wait until PostgreSQL started and listens on port 5432.
while [ -z "`netstat -tln | grep 5432`" ]; do
echo 'Waiting for PostgreSQL to start ...'
sleep 1
done
echo 'PostgreSQL started.'
# Start server.
echo 'Starting server...'
/.../really-start-the-server
this对我来说是一个很好的解决方案!
,我使用的解决方法是设置
autostart=false
上 进程,然后创建自举脚本autostart=true
和autorestart=false
(一步法)。引导程序可以是一个shell脚本 为每个进程调用supervisorctl start
。supervisorctl start
将阻塞,直到一个进程已成功启动。
一个解决方案是使用supervisorctl:为程序B设置自动启动为false,并在由A启动的程序中写入supervisorctl start B
。
例子:
supervisor.cfg
:
[supervisord]
nodaemon=false
pidfile=/tmp/supervisor.pid
logfile=/logs/supervisor.log
[unix_http_server]
file=/var/run/supervisor.sock
[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[program:A]
command=do_a
[program:B]
command=do_b
autostart=false
的do_a
程序包含:
#!/bin/bash
#do things
supervisorctl start B
TBH它是由@drrzmr建议的解决方案,但我没有时间了解它。
- 1. 蟒蛇依赖关系
- 2. 蟒蛇tensorflow模块依赖于glibc的
- 3. 蟒蛇argparse与依赖关系
- 4. Opencv蟒蛇程序
- 5. 蟒蛇铬驱动程序
- 6. 小蟒蛇游戏程序
- 7. 蟒蛇:排序
- 8. 蟒蛇线程
- 9. 蟒蛇在蟒蛇
- 10. 排序为蟒蛇
- 11. 秩序的蟒蛇
- 12. 蟒蛇线程GUI
- 13. 蟒蛇多线程
- 14. 蟒蛇线程块
- 15. 更新蟒蛇3.5蟒蛇
- 16. 无法在蟒蛇蟒蛇
- 17. 蟒蛇2.7:从CMD蟒蛇
- 18. 附加处理程序蟒蛇
- 19. 错误计算器程序蟒蛇
- 20. 信号处理程序,蟒蛇
- 21. 处理程序不是在GAE蟒蛇
- 22. 捕食者vs猎物蟒蛇程序
- 23. Reparse Page Selenium Web驱动程序 - 蟒蛇
- 24. 蟒蛇 - 寻找DB驱动程序
- 25. 谷歌应用程序引擎蟒蛇
- 26. 蟒蛇跨平台应用程序
- 27. 蟒蛇:如何在主程序结束
- 28. 蟒蛇快照程序错误
- 29. “尝试”和“除”我的程序(蟒蛇)
- 30. 与pkill的蟒蛇杀蟒过程
它可能值得看看[ordered-startup-supervisord](https://pypi.python.org/pypi/ordered-startup-supervisord/) –