Supervisor: 如果日志目录不存在则崩溃

创建于 2015-07-03  ·  4评论  ·  资料来源: Supervisor/supervisor

问题 #120

我不知道这是否在 master 分支中以某种方式解决了,但是在 3.1.1 版本中,有人不小心删除了我们服务器中的日志目录,而主管只是停止工作,带走所有其他程序,而不仅仅是带有日志目录丢失。

logging

最有用的评论

已在 fd22ca89ff353fbe92845e9d2517645e6cf149ac 中修复。 此修复程序将包含在 Supervisor 3.2 中。

以下是如何复制它并验证它是否已修复。 最小supervisord.conf

[supervisord]
logfile = /tmp/supervisord.log

[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

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

日志目录必须存在,否则supervisord将拒绝启动。 创建日志目录并使用该配置在前台启动supervisord

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

supervisord仍在运行时删除日志目录:

$ rmdir /thelogdir

尝试启动该过程:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT

所有4条评论

我也看到过这种行为并对此感到恼火。 我认为正确的行为是尽可能创建 logdir,至少不应该允许其他任务崩溃

我也看到过这种行为并对此感到恼火。

它什么时候发生? 原评论不具体。 当stdout_logfile [program:x]部分中的stdout_logfile指定了一个不存在的日志目录时,是否会发生崩溃? 您使用的是哪个主管版本?

我认为正确的行为是尽可能创建 logdir

我不使用任何其他具有此类行为的程序。 supervisord没有足够的信息来自动创建日志目录,因为它不知道哪个用户应该拥有该目录或权限应该是什么。 我认为它唯一可以在不增加一堆选项的情况下做的唯一一件事就是在日志目录不存在时显示明确的错误消息。

至少不应该允许其他任务崩溃

我同意添加stdout_logfilestderr_logfile指定不存在的目录的[program:x]部分不应崩溃supervisord

当 [program:x] 部分中的 stdout_logfile 指定一个不存在的日志目录时,是否会发生崩溃? 您使用的是哪个主管版本?

是的。 对我来说 3.1.3 上的一些问题。

已在 fd22ca89ff353fbe92845e9d2517645e6cf149ac 中修复。 此修复程序将包含在 Supervisor 3.2 中。

以下是如何复制它并验证它是否已修复。 最小supervisord.conf

[supervisord]
logfile = /tmp/supervisord.log

[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

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

日志目录必须存在,否则supervisord将拒绝启动。 创建日志目录并使用该配置在前台启动supervisord

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

supervisord仍在运行时删除日志目录:

$ rmdir /thelogdir

尝试启动该过程:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

alexmnv picture alexmnv  ·  3评论

cachvico picture cachvico  ·  3评论

tkf picture tkf  ·  4评论

detailyang picture detailyang  ·  4评论

guettli picture guettli  ·  4评论