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影响)。什么时候? 睡眠重生它没有重新启动链条,它只经过一次。