Python 守护进程 实现 start stop restart
来源:互联网 发布:jquery 删除二维数组 编辑:程序博客网 时间:2024/06/06 20:45
#!/usr/bin/env python2.7import sys, os, time, atexitfrom signal import SIGTERM class Daemon:"""A generic daemon class.Usage: subclass the Daemon class and override the run() method"""def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):self.stdin = stdinself.stdout = stdoutself.stderr = stderrself.pidfile = pidfiledef daemonize(self):"""do the UNIX double-fork magic, see Stevens' "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177)http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16"""try: pid = os.fork() if pid > 0:# exit first parentsys.exit(0) except OSError, e: sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))sys.exit(1)# decouple from parent environmentos.chdir(os.path.dirname(os.path.abspath(__file__))) os.setsid() os.umask(0) # do second forktry: pid = os.fork() if pid > 0:# exit from second parentsys.exit(0) except OSError, e: sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))sys.exit(1) # redirect standard file descriptorssys.stdout.flush()sys.stderr.flush()si = file(self.stdin, 'r')so = file(self.stdout, 'a+')se = file(self.stderr, 'a+', 0)os.dup2(si.fileno(), sys.stdin.fileno())os.dup2(so.fileno(), sys.stdout.fileno())os.dup2(se.fileno(), sys.stderr.fileno())# write pidfileatexit.register(self.delpid)pid = str(os.getpid())file(self.pidfile,'w+').write("%s\n" % pid)def delpid(self):os.remove(self.pidfile)def start(self):"""Start the daemon"""# Check for a pidfile to see if the daemon already runstry:pf = file(self.pidfile,'r')pid = int(pf.read().strip())pf.close()except IOError:pid = Noneif pid:message = "pidfile %s already exist. Daemon already running?\n"sys.stderr.write(message % self.pidfile)sys.exit(1)# Start the daemonself.daemonize()self.run()def stop(self):"""Stop the daemon"""# Get the pid from the pidfiletry:pf = file(self.pidfile,'r')pid = int(pf.read().strip())pf.close()except IOError:pid = Noneif not pid:message = "pidfile %s does not exist. Daemon not running?\n"sys.stderr.write(message % self.pidfile)return # not an error in a restart# Try killing the daemon processtry:while 1:os.kill(pid, SIGTERM)time.sleep(0.1)except OSError, err:err = str(err)if err.find("No such process") > 0:if os.path.exists(self.pidfile):os.remove(self.pidfile)else:print str(err)sys.exit(1)def restart(self):"""Restart the daemon"""self.stop()self.start()def run(self):"""You should override this method when you subclass Daemon. It will be called after the process has beendaemonized by start() or restart()."""
使用方法:继承这个类即可
class MyDaemon(Daemon): def __init__(self): pass def run(self): '''代码逻辑'''if __name__ == '__main__': daemon = MyDaemon() #daemon.run() # sys.exit() 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: daemon.run() print "Unknown command" sys.exit(2) sys.exit(0) else: print "usage: %s start|stop|restart" % sys.argv[0] sys.exit(2)
阅读全文
0 0
- Python 守护进程 实现 start stop restart
- memcached shell(start stop restart)
- linux中守护进程启停工具start-stop-daemon
- Keepalived: Problem: service keepalived [start|stop|restart]
- shell脚本示例,start stop restart
- service network start|stop|restart 命令理解
- /etc/init.d/xxx start/stop/restart
- JBOSS START/STOP/RESTART shell script
- Python实现的守护进程
- Python 实现的守护进程
- Python实现Daemon(守护)进程
- Python守护进程daemon实现
- linux中守护进程启停工具start-stop-daemon使用介绍
- How to start/restart/stop apache server on ubuntu
- Linux Start Restart and Stop The Cron or Crond Service
- How To Start / Restart / Stop Network and Routing Service
- Linux Start Restart and Stop The Cron or Crond Service
- 添加nginx为系统服务(service nginx start/stop/restart)
- 一个很好的教程网站(asp.net)
- windows系统下安装配置 Nginx 的常见问题
- 如何使用Openlayer发布地图
- Appium 常用方法
- R聚类算法-(K-Means算法)
- Python 守护进程 实现 start stop restart
- jackson对日期的处理(序列化与反序列化)
- RocketMQ实战(一)
- numpy用法
- 修改navigationbar间距及高度
- Linux内核分析-4/5/系统调用
- touch事件中的touches、targetTouches和changedTouches(详解)
- Decoding CodeForces
- Vue.js——60分钟快速入门