您的位置:首页 > 大数据 > 人工智能

supervisorctl报错"error: <class 'socket.gaierror'>, [Errno -2] Name or service not known"的解决方法

2016-01-04 22:53 936 查看
如果用Python写过线上的后端服务,相信对Supervisor不会陌生,它包含两个主要工具:

1)supervisord: 用来实现进程守护

2)supervisorctl: 用来实现supervisord对其守护进程的控制,如reload配置文件、启/停其守护的子进程,等等

在使用supervisorctl执行如下命令时,

## 其中sup.xxx.conf是supervisord的配置文件
$ supervisorctl -c conf/sup.xxx.conf


偶尔会遇到如下报错:

error: <class 'socket.gaierror'>, [Errno -2] Name or service not known: file: /home/slvher/python/2.7/lib/python2.7/socket.py line: 553


其中,socket.py第553行代码片段如下:

551     host, port = address
552     err = None
553     for res in getaddrinfo(host, port, 0, SOCK_STREAM):
554         af, socktype, proto, canonname, sa = res
555         sock = None
556         try:
557             sock = socket(af, socktype, proto)
558             if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
559                 sock.settimeout(timeout)
560             if source_address:
561                 sock.bind(source_address)
562             sock.connect(sa)
563             return sock


基础库报错?

于是,在第553行前面增加调试代码,print出host和port的值,发现port居然是”9212;”(其中9212是配置文件sup.xxx.conf中指定的supervisorctl的listen端口)

查看sup.xxx.conf文件,发现在supervisorctl的配置部分,配置serverurl时端口后面直接跟着分号,如下示例:

[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9723; use an http:// url to specify an inet socket


在端口号和注释符;之间加个空格就解决了:

[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9723 ; use an http:// url to specify an inet socket


supervisorctl加载配置文件时,居然没有正确解析出注释符,挖的一手好坑。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: