Socket - Services qui "volent" le port.
Bonjour,
J'en appele à vous pour un problème, qui me paraît étrange, relatif aux sockets.
Pour présenter l'environnement:
Mandriva Linux release 2009.0
Python 2.5.2
Nagios 3.0
Je crée un serveur UDP en python, et selon la requête qu'il va recevoir il va redémarrer le service Nagios de la machine.
Lorsque je tue/termine mon serveur, j'ai la surprise de voir que Nagios se met à squatter le port que j'utilisais alors qu'il ne l'utilise jamais.
Ca me fait le même problème avec d'autres services qui sont des daemons perl ou python.
Si je redémarre 2 services, mettons Nagios et un autre en python, lorsque j'arrête mon serveur, Nagios se met à "squatter le port" et si j'arrête Nagios c'est l'autre service qui se met à utiliser le port.
Je peux résumer ceci par les logs systèmes suivants:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
# ps axf
29718 ? Ss 0:00 /usr/bin/python /home/dysen/monserveur.py
29942 ? Ssl 0:00 /usr/bin/python /usr/lib/storeme/StoreMe.py
29958 ? Ssl 0:00 nagios -d /etc/nagios/nagios.cfg
# netstat -taupen
tcp 0 0 0.0.0.0:50001 0.0.0.0:* LISTEN
84 4258217 29942/python
udp 0 0 0.0.0.0:50001 0.0.0.0:*
84 4258220 29942/python
udp 0 0 0.0.0.0:50006 0.0.0.0:* 0
4257159 29718/python
# /etc/init.d/monserveur stop
# ps axf
29942 ? Ssl 0:00 /usr/bin/python /usr/lib/storeme/StoreMe.py
29958 ? Ssl 0:00 nagios -d /etc/nagios/nagios.cfg
# netstat -taupen
tcp 0 0 0.0.0.0:50001 0.0.0.0:* LISTEN
84 4258217 29942/python
udp 0 0 0.0.0.0:50001 0.0.0.0:*
84 4258220 29942/python
udp 0 0 0.0.0.0:50006 0.0.0.0:* 0
4257159 29942/python
# /etc/init.d/storeme stop
# ps axf
29958 ? Ssl 0:00 nagios -d /etc/nagios/nagios.cfg
# netstat -taupen
udp 0 0 0.0.0.0:50006 0.0.0.0:* 0
4257159 29958/nagios |
Pour vous éviter la version super longue de mon programme, je vous reporte ici une version très courte mais qui reproduit exactement le même problème:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#!/usr/bin/python
import os
import socket
addr = ("0.0.0.0", 50006)
udpsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
buffersize = 65535
udpsock.bind(addr)
os.system("service nagios restart")
os.system("service storeme restart")
udpsock.close() |
Si quelqu'un a une solution, merci!