헬프 데스크에서 Oracle 인스턴스를 다시 시작할 수 있도록하기 위해 Oracle 인스턴스를 시작하는 쉘 스크립트를 시작하는 작은 파이썬 웹 서버를 구현하려고합니다.BaseHTTPServer 내 데몬 프로세스 시작
코드가 완료되고 인스턴스가 시작되지만 문제가 발생합니다. 인스턴스가 웹 서버에 연결되어 있으므로 인스턴스가 중지되고 브라우저가 버퍼가 닫히지 않고 수신 대기 시간이 ora_pmon_INSTANCE
인 경우 웹 서버 포트에.
process = os.system("/home/oracle/scripts/webservice/prueba.sh TFINAN")
및
process = subprocess.Popen(["/home/oracle/scripts/webservice/prueba.sh", "TFINAN"], shell=False, stdout=subprocess.PIPE)`
하지만 같은 발생합니다.
또한 데몬으로 스크립트를 시작하려고했습니다 (redhat의 init 스크립트에서 데몬 기능 사용). 스크립트는 Oracle 인스턴스를 동일한 결과로 시작합니다.
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn
import threading
import argparse, urlparse
import re
import cgi, sys, time
import os, subprocess
class HTTPRequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(403)
self.send_header('Content-Type', 'text/html')
self.end_headers()
return
def do_GET(self):
ko = False
respuesta = ""
params = {}
myProc = -1
parsed_path = urlparse.urlparse(self.path)
try:
params = dict([p.split('=') for p in parsed_path[4].split('&')])
except:
params = {}
elif None != re.search('/prueba/*', self.path):
self.send_response(200)
respuesta = "Hola Mundo! -->" + str(params['database'])
elif None != re.search('/startup/*', self.path):
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
cmd = """ <html>
<body><H2> Iniciando instancia oracle: """ + str(params["database"]) + '. Espere un momento, por favor ...</H2>'
self.wfile.write(cmd)
#process = os.system("/home/oracle/scripts/webservice/prueba.sh INSTANCE")
process = subprocess.Popen(["/home/oracle/scripts/webservice/prueba.sh", "INSTANCE"], shell=False, stdout=subprocess.PIPE)
# wait for the process to terminate
out, err = process.communicate()
errcode = process.returncode
if errcode == 0:
self.wfile.write("""<H1> Instancia iniciada correctamente
</H1>
</body> </html>""")
self.wfile.close()
else:
respuestaok = "Error inicializando la instancia: " + str(params['database']) + " Intentelo de nuevo pasados unos minutos y si vuelve a fallar escale la incidencia al siguiente nivel de soporte"
else:
self.send_response(403, 'Bad Request: pagina no existe')
respuesta = "Solicitud no autorizada"
if respuesta != "":
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(respuesta)
self.wfile.close()
if ko:
server.stop()
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
allow_reuse_address = True
def shutdown(self):
self.socket.close()
sys.exit(0)
class SimpleHttpServer(object):
def __init__(self, ip, port):
self.server = ThreadedHTTPServer((ip,port), HTTPRequestHandler)
def start(self):
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.server_thread.daemon = True
self.server_thread.start()
def waitForThread(self):
self.server_thread.join()
def stop(self):
self.server.shutdown()
if __name__=='__main__':
parser = argparse.ArgumentParser(description='HTTP Server')
parser.add_argument('port', type=int, help='Listening port for HTTP Server')
parser.add_argument('ip', help='HTTP Server IP')
args = parser.parse_args()
server = SimpleHttpServer(args.ip, args.port)
print 'HTTP Server Running...........'
server.start()
server.waitForThread()
가 너희 중에 누구든지 나를 도울 수 :
이 내 코드?