我想在CENTOS服务器中运行python脚本:
#!/usr/bin/env python import socket try: import thread except ImportError: import _thread as thread #Py3K changed it. class Polserv(object): def __init__(self): self.numthreads = 0 self.tidcount = 0 self.port = 843 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind(('100.100.100.100', self.port)) self.sock.listen(5) def run(self): while True: thread.start_new_thread(self.handle, self.sock.accept()) def handle(self,conn,addr): self.numthreads += 1 self.tidcount += 1 tid=self.tidcount while True: data=conn.recv(2048) if not data: conn.close() self.numthreads-=1 break #if "<policy-file-request/>\0" in data: conn.sendall(b"<?xml version='1.0'?><cross-domain-policy><allow-access-from domain='*' to-ports='*'/></cross-domain-policy>") conn.close() self.numthreads-=1 break #conn.sendall(b"[#%d (%d running)] %s" % (tid,self.numthreads,data) ) Polserv().run()
我正在使用$ python flashpolicyd.py它,并且工作正常…问题是:即使关闭ssh控制台后,如何保持此脚本运行?
$ python flashpolicyd.py
我使用此代码来守护我的应用程序。它允许您start/stop/restart使用以下命令来编写脚本。
start/stop/restart
python myscript.py start python myscript.py stop python myscript.py restart
除此之外,我还有一个init.d脚本来控制我的服务。这使您可以在操作系统启动时自动启动服务。
这是一个简单的示例,可以助您一臂之力。只需将代码移到一个类中,然后从run内部的函数中调用它即可MyDeamon。
run
MyDeamon
import sys import time from daemon import Daemon class YourCode(object): def run(self): while True: time.sleep(1) class MyDaemon(Daemon): def run(self): # Or simply merge your code with MyDaemon. your_code = YourCode() your_code.run() if __name__ == "__main__": daemon = MyDaemon('/tmp/daemon-example.pid') if len(sys.argv) == 2: if 'start' == sys.argv[1]: daemon.start() elif 'stop' == sys.argv[1]: daemon.stop() elif 'restart' == sys.argv[1]: daemon.restart() else: print "Unknown command" sys.exit(2) sys.exit(0) else: print "usage: %s start|stop|restart" % sys.argv[0] sys.exit(2)
暴发户
如果您正在运行使用Upstart的操作系统(例如CentOS 6)-您也可以使用Upstart来管理服务。如果您使用Upstart,则可以按原样保留脚本,只需在下面添加如下内容/etc/init/my- service.conf
/etc/init/my- service.conf
start on started sshd stop on runlevel [!2345] exec /usr/bin/python /opt/my_service.py respawn
然后,您可以使用启动/停止/重新启动来管理服务。
例如
start my-service stop my-service restart my-service
这里提供了使用新贵的更详细的示例。