gpt4 book ai didi

cron - 使用主管作为 CRON

转载 作者:行者123 更新时间:2023-12-03 08:48:30 27 4
gpt4 key购买 nike

有没有办法配置supervisor每 X 秒运行一些命令(如 CRON)?

我看到了 eventlistener 和 TICK_ 事件的例子

[eventlistener:memmon]
command=memmon -a 200MB -m bob@example.com
events=TICK_60

但它只运行该命令一次。

最佳答案

问题

正如您在 memmon 示例中看到的,supervisord 没有执行 memmon -a 200MB -m bob@example.com在每次事件中。相反,它启动此事件监听器一次(如果配置池,则可能启动几次),然后通过现有进程的标准输入发送每个新事件。

解决方案

因此,您确实需要为要在事件上触发的每种其他类型的功能找到或编写一个与主管兼容的事件监听器。

实现方法示例

设置配置并编写一个监听器

写一个 supervisord.cfg 事件部分

[eventlistener:passthru]
command=/tmp/simple.py /bin/date -u +"%%s %%S:%%H:%%d:%%m"
events=TICK_60

(注意- % for configParser 的转义)

编写一个 simple.py 事件监听器

通过对 the example listener from the docs 进行更改来创建这个 simple.py 监听器所以它用任何剩余的参数执行它的第一个参数:

#! /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

确保主管配置有效
$ supervisorctl [-c cfg]
supervisor> status
passthru RUNNING pid 4471, uptime 0:00:32
supervisor> tail passthru
OKREADY
RESULT 2
OKREADY
...
supervisor> tail passthru stderr
supervisor> tail passthru stderr
ver:3.0 server:supervisor serial:0 pool:passthru poolserial:0 eventname:TICK_60 len:15
1451411161 01:17:29:12 <--- output
when:1451411160ver:3.0 server:supervisor serial:1 pool:passthru poolserial:1 eventname:TICK_60 len:15
1451411220 00:17:29:12 <--- output
when:1451411220

现在 date -u +"%s %S:%H:%d:%m"每 60 秒运行一次。

交换所需的命令

创建可执行脚本

/tmp/hiworld.php:
#! /usr/bin/php
<?= "hiya\n";

(chmod +x ...)

在 supervisord.cfg 中更改监听器的参数
[eventlistener:passthru]
command=/tmp/simple.py /tmp/hiworld.php
;stdout_logfile=/tmp/passthru
events=TICK_60
;autorestart=true
;startsecs=0

重新加载主管和测试
(重读似乎没有检测到这个变化)
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> status
passthru RUNNING pid 6017, uptime 0:00:10
supervisor> tail passthru stderr
supervisor> status
passthru RUNNING pid 6017, uptime 0:00:21
supervisor> status
passthru RUNNING pid 6017, uptime 0:01:01
supervisor> tail passthru stderr
ver:3.0 server:supervisor serial:316 pool:passthru poolserial:0 eventname:TICK_60 len:15
hiya
when:1418926740
supervisor>

结尾

现在所需的命令每 60 秒运行一次。 您现在可以阅读以调整权限、位置、日志等的详细信息。

关于cron - 使用主管作为 CRON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com