[Python-de] RPC-Server

Dmitrij Repp stiner_rd at yahoo.de
Mon Nov 1 11:27:52 CET 2004


Hallo, ich habe folgendes Problem:

Es gibt ein RPC-Server:

#!/usr/bin/env python2

import SimpleXMLRPCServer
import xmlrpclib
import os
import string
import sys
import time
import thread

username = 'backup'

pfad = '/home/backup/'
TEMP = '/home/backup/temp'
lock_pfad = pfad + 'ports_lock/'
ip = '0.0.0.0'
s_port = 7500


l_counter = 0

def log(func,message):
	global l_counter
	l_counter = l_counter + 1
	t = string.split(time.ctime())[1:4]
	t_ = '%s %s %s' %(t[1],t[0],t[2])
	log = open('/home/%s/logs/vserver.log' %username,
'a+')
	log.write('%s. %s %s %s\n'
%(str(l_counter),t_,func,message))
	log.close()

def start_new_backup_server(port):
	os.system('python %sbackupserver.py %s' %(pfad,port))

	
def get_backup_server():
	func = 'get_backup_server()'
	locked = os.listdir(lock_pfad)
	if len(locked)<10:
		for p in range(10):
			port = str(7501+p)
			if port not in locked:
				lock = os.popen('touch %s%s' %(lock_pfad,port))
				log(func,'port %s locked' %port)

				for i in range(5):
				
thread.start_new_thread(start_new_backup_server,(port,))
					s = xmlrpclib.ServerProxy("http://127.0.0.1:%s"
%port)
					time.sleep(5)
					try:
						s.ping()
						log(func,'backupserver gestartet on port %s'
%port)
						log(func,s.ping())
						return port
					except Exception, e:
						log(func,'backupserver nicht gestartet %i, %s'
%(i,e))
						
				os.remove(lock_pfad+port)
				return 'no'
	else:
		log(func,'kein Port ist frei. backupserver nicht
gestartet')
		return 'no'

# --- ausgeschniten

def stop_backup_server(port,pid,RSAKEY):
	func = 'stop_backup_server(port,pid,RSAKEY)'
	log(func,'port - %s  pid - %s' %(port,pid))
	reset_rsa_key(RSAKEY)
	try:
		os.system('kill -9 %s' %pid)
		log(func,'prozess %s getotet' %pid)
	except Exception, e:
		log(func,'prozess %s nicht getotet, %s' %e)
		return e
	locked = os.listdir(lock_pfad)
	if port in locked:
		os.remove(lock_pfad+str(port))
		log(func,'port %s befreit' %port)

	try:
		os.system('rm -rf %s/%s' %(TEMP,pid))
		log(func,'%s/%s befreit' %(TEMP,pid))
	except Exception, e:
		log(func,'%s/%s nicht befreit, %s' %(TEMP,pid,e))
	
	return 'ok'


os.system('rm -rf /home/%s/ports_lock/*' %username)


server = SimpleXMLRPCServer.SimpleXMLRPCServer(("%s"
%ip, 7500), logRequests = 0)
server.register_function(get_backup_server)
# - ausgeschnitten 
server.register_function(stop_backup_server)
log('START','gestartet')
server.serve_forever()


Er wartet auf clientsanfrage und startet ein anderes
RPC-Server speziell für jeden client. Wenn client
fertig ist, dann tötet Hauptserver den Clientserver.
Nach dem ein andere Client will Klientserver kriegen.
An der stelle kriege ich fehler (98, 'Address already
in use'). 

Und jetzt die Frage: wie muss ich correct den
Klientserver beenden, damit er noch mal am dasselben
Port starten könnte? 



	

	
		
___________________________________________________________
Gesendet von Yahoo! Mail - Jetzt mit 100MB Speicher kostenlos - Hier anmelden: http://mail.yahoo.de