首页 > 解决方案 > Supervisord 监听器:每 10 分钟执行一次 symfony 命令

问题描述

我正在尝试使用supervisord侦听器每 N 分钟运行一次命令。我有一个订阅了TIC_60事件的监听器。

我怎样才能延迟我的命令的执行,比如说 10 分钟。

主管监听器

[eventlistener:my-listener]
command=/tmp/my-listener.py php /var/www/symfony/bin/console my-symfony-command
events=TICK_60

侦听器脚本

#! /usr/bin/python
import sys
import subprocess

def write_stdout(s):
    sys.stdout.write(s)
    sys.stdout.flush()

def write_stderr(s):
    sys.stderr.write(s)
    sys.stderr.flush()

def main(args):
    while 1:
        write_stdout('READY\n') # transition from ACKNOWLEDGED to READY
        line = sys.stdin.readline()  # read header line from stdin
        write_stderr(line) # print it out to stderr
        headers = dict([ x.split(':') for x in line.split() ])
        data = sys.stdin.read(int(headers['len'])) # read the event payload
        res = subprocess.call(args, stdout=sys.stderr); # don't mess with real stdout
        write_stderr(data)
        write_stdout('RESULT 2\nOK') # transition from READY to ACKNOWLEDGED

if __name__ == '__main__':
    main(sys.argv[1:])
    import sys

标签: pythonphpsymfonysupervisord

解决方案


最后,我使用 PHP 和共享内存中的侦听器制作了自己的解决方案。在它所控制的监听器上,TICK_60 已经被触发了 10 次,因此可以认为已经过去了 10 分钟。

控制有 10 个触发事件的计数器保存在共享内存中。


推荐阅读