supervisord的一个事件侦听器,它将根据某些状态启动项。

ordered-startup-supervisord的Python项目详细描述


问题

这个问题可以在supervisor bug 122中看到。supervisor中的优先级顺序确实决定了启动顺序,但是 当autostart=true主管不等待上一个进程运行以继续时。是什么 更难的是在继续之前有需要退出的初始化脚本。这个软件的目的是 这一个用例更简单。

工作原理

这是主管的事件侦听器。这意味着它在启动时由主管运行,主管将发送它 每当程序达到特定进程状态时发送消息。配置后,它将等到一个主管 子进程进入配置状态,然后启动下一个进程。下一个过程由优先级决定。

注意事项

这并不能解决所有的情况。如果你需要的是每件事都一个接一个地开始,那么这很可能会解决 你的问题。如果您需要混合和匹配哪个以并行方式开始,哪个以串行方式(依赖项)开始,这可能是 不是你想要的。

这不会启动组。它可以启动属于一个组的程序,但不会直接启动一个组。

配置

配置需要一些东西。首先,您需要将此软件配置为事件侦听器:

[eventlistener:inorder]
command=/path/to/ordered-startup-listener
autostart=true
events=PROCESS_STATE

这可能是你唯一想自动启动的东西。它需要xml rpc api,所以不要忘记配置它。一个 完整的例子将在后面展示。

有两个附加配置可以放在[程序:节中。这些是:

startinorder
This must be set to true in order to have the next process in the line to be started after this one.
startnextafter
This is optional and is defaulted to RUNNING. If you want the process to exit before continuing then set this to EXITED (this is useful for initialization scripts that have to finish before something else starts). This is case insensitive.

示例

下面是按优先级顺序依次启动一个项目的管理器配置示例。 顺序是ping、sleep、ping2和ping3。Ping作业被配置为等待他们退出之前。 下一个作业将启动(这通常用于在继续之前需要完成的初始化脚本)。

第一个supervisord.conf

[supervisord]
nodaemon=true

[inet_http_server]
port=127.0.0.1:9001

[supervisorctl]
serverurl=http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[eventlistener:inorder]
command=/path/to/ordered-startup-listener
autostart=true
events=PROCESS_STATE

[include]
files=supervisord.d/*.conf

接下来,我们将查看supervisord.d目录中的作业,如supervisord.d/ping.conf

[program:ping]
command=/sbin/ping -c1 www.google.com
priority=100
startsecs=0
autorestart=false
autostart=false
startinorder=true
startnextafter=exited

supervisord.d/ping2.conf

[program:ping2]
command=/sbin/ping -c1 www.google.com
priority=200
startsecs=0
autorestart=false
autostart=false
startinorder=true
startnextafter=exited

supervisord.d/ping3.conf

[program:ping3]
command=/sbin/ping -c1 www.google.com
priority=400
startsecs=0
autorestart=false
autostart=false
startinorder=true
startnextafter=exited

supervisord.d/sleep.conf

[program:sleep]
command=/bin/sleep 60
priority=101
startsecs=5
autorestart=true
autostart=false
startinorder=true

注意,所有的程序:节都有autostart=false。最后让我们看看运行 主管:

2016-10-08 12:15:22,014 INFO Increased RLIMIT_NOFILE limit to 1024
2016-10-08 12:15:22,015 INFO Included extra file "/Users/jason.corbett/tmp/supervisor/supervisord.d/ping.conf" during parsing
2016-10-08 12:15:22,015 INFO Included extra file "/Users/jason.corbett/tmp/supervisor/supervisord.d/ping2.conf" during parsing
2016-10-08 12:15:22,015 INFO Included extra file "/Users/jason.corbett/tmp/supervisor/supervisord.d/ping3.conf" during parsing
2016-10-08 12:15:22,015 INFO Included extra file "/Users/jason.corbett/tmp/supervisor/supervisord.d/sleep.conf" during parsing
2016-10-08 12:15:22,044 INFO RPC interface 'supervisor' initialized
2016-10-08 12:15:22,044 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2016-10-08 12:15:22,045 INFO supervisord started with pid 39396
2016-10-08 12:15:23,050 INFO spawned: 'inorder' with pid 39402
2016-10-08 12:15:23,325 INFO spawned: 'ping' with pid 39403
2016-10-08 12:15:23,325 INFO success: ping entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2016-10-08 12:15:23,359 INFO exited: ping (exit status 0; expected)
2016-10-08 12:15:24,048 INFO success: inorder entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-10-08 12:15:24,052 INFO spawned: 'sleep' with pid 39404
2016-10-08 12:15:29,051 INFO success: sleep entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
2016-10-08 12:15:29,055 INFO spawned: 'ping2' with pid 39410
2016-10-08 12:15:29,056 INFO success: ping2 entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2016-10-08 12:15:29,069 INFO exited: ping2 (exit status 0; expected)
2016-10-08 12:15:29,072 INFO spawned: 'ping3' with pid 39411
2016-10-08 12:15:29,072 INFO success: ping3 entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2016-10-08 12:15:29,084 INFO exited: ping3 (exit status 0; expected)
2016-10-08 12:16:24,059 INFO exited: sleep (exit status 0; expected)
2016-10-08 12:16:24,061 INFO spawned: 'sleep' with pid 39452
2016-10-08 12:16:29,059 INFO success: sleep entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)

所有进程都按顺序启动。ping2睡眠后启动的running(受startsecs影响)。什么时候? 睡眠重生它没有重新启动链条,它只经过一次。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
并行处理java。util。同时发生的叉子在游泳池里。常见的并行性准则,用于选择正确的并行度大小   java如何将空白字符追加到指定长度?   安卓应用程序中出现错误,SSLHandshakeException,找不到证书路径的信任锚点   java如何使用JUnit Mockito验证检查方法是否未被调用   java如何使用不同的@RequestMapping解析多个控制器中的静态页面   Selenium中的javascript需要验证搜索结果   访问数据库SQLiteopenHelper方法时java应用程序崩溃(nullpointerexception)   在二叉树中验证最小堆时出现java空指针异常   Java 7的SSL连接失败   java用RestEasyWebTarget替换ProxyFactory不起作用   在Java应用程序中单击“否”按钮后,数组程序冻结(无响应)   数组中的前缀Java初学者前进和   Java HTML解析器,包括脚本标记和LineNumberReader   在java中为长类型数字加前导零   正则表达式无法映射正则表达式java。lang.IllegalArgumentException:模式段中捕获组的数量