Linux培训
达内IT学院

400-996-5531

python守护进程监控hive server

  • 发布:Linux培训
  • 来源:网络
  • 时间:2015-07-09 10:45

    #!/usr/bin/env python  
      
    import sys, os, time, atexit, string  
    from signal import SIGTERM  
      
    class Daemon:  
        def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):  
            self.stdin = stdin  
            self.stdout = stdout  
            self.stderr = stderr  
            self.pidfile = pidfile  
      
        def _daemonize(self):  
            try:  
                pid = os.fork()  
                if pid > 0:  
                    sys.exit(0)  
            except OSError, e:  
                sys.stderr.write('fork #1 failed: %d (%s)\n' % (e.errno, e.strerror))  
                sys.exit(1)  
            os.setsid()  
            os.chdir("/")  
            os.umask(0)  
      
            try:  
                pid = os.fork()  
                if pid > 0:  
                    sys.exit(0)  
            except OSError, e:  
                sys.stderr.write('fork #2 failed: %d (%s)\n' % (e.errno, e.strerror))  
                sys.exit(1)  
      
            sys.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())  
      
            atexit.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):  
            try:  
                pf = file(self.pidfile,'r')  
                pid = int(pf.read().strip())  
                pf.close()  
            except IOError:  
                pid = None  
      
            if pid:  
                message = 'pidfile %s already exist. Daemon already running?\n'  
                sys.stderr.write(message % self.pidfile)  
                sys.exit(1)  
      
            self._daemonize()  
            self._run()  
      
        def stop(self):  
            try:  
                pf = file(self.pidfile,'r')  
                pid = int(pf.read().strip())  
                pf.close()  
            except IOError:  
                pid = None  
      
            if not pid:  
                message = 'pidfile %s does not exist. Daemon not running?\n'  
                sys.stderr.write(message % self.pidfile)  
                return  
      
            try:  
                while 1:  
                    os.kill(pid, SIGTERM)  
                    time.sleep(0.1)  
                    os.system("kill -9 `jps|grep RunJar|awk '{print $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):  
            self.stop()  
            self.start()  
    class MyDaemon(Daemon):  
        def _run(self):  
            while True:  
                proccess = os.popen("jps|grep RunJar|awk '{print $1}'|wc -l").read().strip()  
                port = os.popen("netstat -tnl|grep 10000|awk '{print $4}'|grep 10000|wc -l").read().strip()  
                if proccess == '0':  
                    os.system('service hive-thrift start')  
                time.sleep(2)  
    if __name__ == '__main__':  
                    daemon = MyDaemon('/tmp/watch_process.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)  

将代码保存为hivemonitor.py 赋予可执行权限

chmod +x hivemonitor.py

运行脚本./hivemonitor.py start

上面脚本在centos 5.8 python 2.7环境测试通过

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:python统计日志ip访问数脚本
下一篇:python命令行下按tab建补全的方法

关于 python 中的 setup.py

Python 程序员的 10 个常见错误

使用 Python 创建你自己的 Shell (上)

2015年出现的十大流行 Python 库

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省