alexsilva / supervisor

Supervisor process control system for Windows
http://supervisord.org
Other
118 stars 26 forks source link

multivisor plugin does not work #5

Closed laurent-claustre closed 5 years ago

laurent-claustre commented 5 years ago

We intensively use couple supervisor/multivisor on linux boxes and now would like to use your nice windows version of supervisor. Nevertheless it failed. This is the configuration we use add the multivisor rpc interface:

; new rpc interface for multivisor [rpcinterface:multivisor] supervisor.rpcinterface_factory = multivisor.rpc:make_rpc_interface bind=*:9002

And the error message returned by supervisor-win when multivisor try to connect: No handlers could be found for logger "zerorpc.core"

I saw you informed supervisor team about your port to windows, is there a chance to merge both projects?

alexsilva commented 5 years ago

Supervisor for windows delivers the basics of the original supervisor (Linux and Windows are quite different).

I'm going to do some testing and see if I can solve this problem with multivisor.

alexsilva commented 5 years ago

No handlers could be found for logger "zerorpc.channel"

By my tests multivisor it is compatible with supervisor-win. This message is not an error but a warning generated by the logging module.

This warning should not prevent you from using multivisor, but if it is happening give me the complete configuration files.

laurent-claustre commented 5 years ago

thanks for your answer, I still have the issue. this is the log of the supervisord deamon:

2019-05-14 09:53:37,312 WARN Included extra file "c:\blissadm\supervisord\conf.d\xmap.conf" during parsing
2019-05-14 09:53:37,342 INFO RPC interface 'supervisor' initialized
2019-05-14 09:53:37,342 INFO RPC interface 'multivisor' initialized
2019-05-14 09:53:37,342 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2019-05-14 09:53:37,342 INFO supervisord started with pid 5392

And its configuration:

; supervisor config file
[inet_http_server]
port=:9001

[supervisord]
logfile=c:\blissadm\supervisord\log\supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=c:\blissadm\supervisord\\supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=c:\blissadm\supervisord\log            ; ('AUTO' child log dir, default $TEMP)
identifier =  wid10xmap1

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

; new rpc interface for multivisor
[rpcinterface:multivisor]
supervisor.rpcinterface_factory = multivisor.rpc:make_rpc_interface
bind=*:9002

[supervisorctl]
serverurl=http://localhost:9001

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = c:\blissadm\supervisord\conf.d\*.conf

The multivisor log output is:

INFO 2019-05-14 10:19:19,665 multivisor.wid10xmap1: Connection error
INFO 2019-05-14 10:19:29,643 multivisor.wid10xmap1: (re)initializing...
INFO 2019-05-14 10:19:29,665 multivisor.wid10xmap1: Connection error

And finally the multivisor configuration:

[supervisor:wid10xmap1]
url=wid10xmap1:9002

I'm using conda miniconda3 python installation, and a python2.7 env., this is the list of the packages installed:

(base) PS>conda activate multivisor_py27
(multivisor_py27) PS>
(multivisor_py27) PS>
(multivisor_py27) PS>
(multivisor_py27) PS>conda activate multivisor_py2
(multivisor_py27) PS>
(multivisor_py27) PS>
(multivisor_py27) PS>conda list
# packages in environment at C:\ProgramData\Miniconda3\envs\multivisor_py27:
#
# Name                    Version                   Build  Channel
certifi                   2019.3.9                 py27_0
cffi                      1.12.3                   pypi_0    pypi
chardet                   3.0.4                    pypi_0    pypi
click                     7.0                      pypi_0    pypi
dateparser                0.7.1                    pypi_0    pypi
flask                     1.0.2                    pypi_0    pypi
future                    0.17.1                   pypi_0    pypi
gevent                    1.4.0                    pypi_0    pypi
greenlet                  0.4.15                   pypi_0    pypi
humanize                  0.5.1                    pypi_0    pypi
idna                      2.8                      pypi_0    pypi
itsdangerous              1.1.0                    pypi_0    pypi
jinja2                    2.10.1                   pypi_0    pypi
louie                     1.1                      pypi_0    pypi
markupsafe                1.1.1                    pypi_0    pypi
maya                      0.6.1                    pypi_0    pypi
meld3                     1.0.2                    pypi_0    pypi
msgpack-python            0.5.6                    pypi_0    pypi
multivisor                5.0.2                    pypi_0    pypi
nose                      1.3.7                    pypi_0    pypi
pendulum                  2.0.4                    pypi_0    pypi
pip                       19.1.1                   py27_0
prompt-toolkit            2.0.9                    pypi_0    pypi
pycparser                 2.19                     pypi_0    pypi
python                    2.7.16               hcb6e200_0
python-dateutil           2.8.0                    pypi_0    pypi
pytz                      2019.1                   pypi_0    pypi
pytzdata                  2019.1                   pypi_0    pypi
pywin32                   224                      pypi_0    pypi
pyzmq                     18.0.1                   pypi_0    pypi
regex                     2019.04.14               pypi_0    pypi
requests                  2.21.0                   pypi_0    pypi
setuptools                41.0.1                   py27_0
six                       1.12.0                   pypi_0    pypi
snaptime                  0.2.4                    pypi_0    pypi
sqlite                    3.28.0               h0c8e037_0
supervisor-win            4.0.2                    pypi_0    pypi
typing                    3.6.6                    pypi_0    pypi
tzlocal                   1.5.1                    pypi_0    pypi
urllib3                   1.24.3                   pypi_0    pypi
vc                        9                    h7299396_1
vs2008_runtime            9.00.30729.1         hfaea7d5_1
wcwidth                   0.1.7                    pypi_0    pypi
werkzeug                  0.15.2                   pypi_0    pypi
wheel                     0.33.2                   py27_0
wincertstore              0.2              py27hf04cefb_0
zerorpc                   0.6.1                    pypi_0    pypi
(multivisor_py27) PS>
alexsilva commented 5 years ago
; new rpc interface for multivisor
[rpcinterface:multivisor]
supervisor.rpcinterface_factory = multivisor.rpc:make_rpc_interface
bind=*:9002

I believe that here is the problem:

[supervisor:wid10xmap1]
url=wid10xmap1:9002

wid10xmap1 does not appear to be a valid domain name.

Try to configure:

[supervisor:wid10xmap1]
url=localhost:9002
laurent-claustre commented 5 years ago

sorry, but I'm running multivisor on an other computer, not the localhost (wid10xmap1), where wid10xmap1 is well resolved by our DNS:

host wid10xmap1
wid10xmap1.esrf.fr has address 160.103.30.3

My multivisor is working fine and can get connection to few other supervisor hosts (linux) this is the full configuration file for multivisor:

[global]
name=ID10

[supervisor:lid101]
url=lid101:9002

[supervisor:lid102]
url=lid102:9002

[supervisor:lid104]
url=lid104:9002

[supervisor:lid10andor1]
url=lid10andor1:9002

[supervisor:lid10bas1]
url=lid10bas1:9002

[supervisor:lid10eiger1]
url=lid10eiger1:9002

[supervisor:lid10mpx1]
url=lid10mpx1:9002

[supervisor:max]
url=max:9002

[supervisor:wid10xmap1]
url=wid10xmap1:9002
alexsilva commented 5 years ago

I believe this is windows blocking the connection.

With the supervisor running and on the same machine run the following command, and report the result: netstat -a (You can report results only from ports in the supervisor.conf)

Can you ensure that port 9002 is open for external connections ?

laurent-claustre commented 5 years ago

Hi Alex, there is no blocking connection, sorry, both port 9001 and 9002 seem to be open, netstat can confirm:

  TCP    160.103.30.3:3389      linuxlolo1:59874       ESTABLISHED
  TCP    160.103.30.3:9001      linuxlolo1:48400       ESTABLISHED
  TCP    160.103.30.3:9001      linuxlolo1:48402       ESTABLISHED
  TCP    160.103.30.3:9001      linuxlolo1:48424       ESTABLISHED
  TCP    160.103.30.3:9002      max:56452              ESTABLISHED

from max host this is multivisor, the connection seems to be established but multivisor still complains about connection error and then it reinitializes it. As you can see i can access supervisor on port 9001 from a web browser.

alexsilva commented 5 years ago

I have done several tests on my local network, between Linux x Windows and Windows x Windows machines and communication always establishes successfully. There's no way I can fix a problem that does not exist in the supervisor-win.

alexsilva commented 5 years ago

Can you make an explicit ip configuration as below ?

; new rpc interface for multivisor
[rpcinterface:multivisor]
supervisor.rpcinterface_factory = multivisor.rpc:make_rpc_interface
bind=0.0.0.0:9002

multivisor must be connected to all interfaces in order to accept external connections.

In my case the result for netstat is quite different.

TCP 0.0.0.0:9002 FIREDRAGON:0 LISTENING

laurent-claustre commented 5 years ago

I did it, but does not fix. In the meantime I open an issue on multivisor project : issue 45

alexsilva commented 5 years ago

Take the tests below, please.

After successfully installing the lib (on the machine where the multivisor client is installed):

python -m pip install zerorpc

Confirm that the machine ip running the supervisor win is still this 160.103.30.3 Confirm that the port that multivisor server is listening to is still 9002

Run the command (python 2):

python -c "import zerorpc; print zerorpc.Client(\"tcp://160.103.30.3:9002\").getPID()"

What is the return ?

Analyzing the code of the multivisor you can see that the error is hidden.

multivisor.py#L70

alexsilva commented 5 years ago

You can try installing the latest version of the windows branch to check if the issue has been resolved. This branch has received all updates from the unix version master branch.

pip install git+https://github.com/alexsilva/supervisor.git@windows -U