zoukankan      html  css  js  c++  java
  • 如何使用python书写守护进程?daemon、python-daemon

    
    

    可以参考的supervisor实现:https://github.com/Supervisor/supervisor;http://supervisord.org/configuration.html

    
    

    pip包python-daemon:https://www.jianshu.com/p/76ecdea99ac7;https://www.python.org/dev/peps/pep-3143/;https://github.com/serverdensity/python-daemon

    
    

    https://pypi.org/project/python-daemon/

    
    

    来个摘抄的示例:https://codeday.me/bug/20180115/119802.html





    #
    !/usr/bin/env python3.5 import sys import os import time import argparse import logging import daemon from daemon import pidfile debug_p = False def do_something(logf): ### This does the "work" of the daemon logger = logging.getLogger('eg_daemon') logger.setLevel(logging.INFO) fh = logging.FileHandler(logf) fh.setLevel(logging.INFO) formatstr = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' formatter = logging.Formatter(formatstr) fh.setFormatter(formatter) logger.addHandler(fh) while True: logger.debug("this is a DEBUG message") logger.info("this is an INFO message") logger.error("this is an ERROR message") time.sleep(5) def start_daemon(pidf, logf): ### This launches the daemon in its context ### XXX pidfile is a context with daemon.DaemonContext( working_directory='/var/lib/eg_daemon', umask=0o002, pidfile=pidfile.TimeoutPIDLockFile(pidf), ) as context: do_something(logf) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Example daemon in Python") parser.add_argument('-p', '--pid-file', default='/var/run/eg_daemon.pid') parser.add_argument('-l', '--log-file', default='/var/log/eg_daemon.log') args = parser.parse_args() start_daemon(pidf=args.pid_file, logf=args.log_file)

    和相应的脚本:

    #!/bin/bash
    #
    # eg_daemon      Startup script for eg_daemon
    #
    # chkconfig: - 87 12
    # description: eg_daemon is a dummy Python-based daemon
    # config: /etc/eg_daemon/eg_daemon.conf
    # config: /etc/sysconfig/eg_daemon
    # pidfile: /var/run/eg_daemon.pid
    #
    ### BEGIN INIT INFO
    # Provides: eg_daemon
    # Required-Start: $local_fs
    # Required-Stop: $local_fs
    # Short-Description: start and stop eg_daemon server
    # Description: eg_daemon is a dummy Python-based daemon
    ### END INIT INFO
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    if [ -f /etc/sysconfig/eg_daemon ]; then
            . /etc/sysconfig/eg_daemon
    fi
    
    eg_daemon=/var/lib/eg_daemon/eg_daemon.py
    prog=eg_daemon
    pidfile=${PIDFILE-/var/run/eg_daemon.pid}
    logfile=${LOGFILE-/var/log/eg_daemon.log}
    RETVAL=0
    
    OPTIONS=""
    
    start() {
            echo -n $"Starting $prog: "
    
            if [[ -f ${pidfile} ]] ; then
                pid=$( cat $pidfile  )
                isrunning=$( ps -elf | grep  $pid | grep $prog | grep -v grep )
    
                if [[ -n ${isrunning} ]] ; then
                    echo $"$prog already running"
                    return 0
                fi
            fi
            $eg_daemon -p $pidfile -l $logfile $OPTIONS
            RETVAL=$?
            [ $RETVAL = 0 ] && success || failure
            echo
            return $RETVAL
    }
    
    stop() {
        if [[ -f ${pidfile} ]] ; then
            pid=$( cat $pidfile )
            isrunning=$( ps -elf | grep $pid | grep $prog | grep -v grep | awk '{print $4}' )
    
            if [[ ${isrunning} -eq ${pid} ]] ; then
                echo -n $"Stopping $prog: "
                kill $pid
            else
                echo -n $"Stopping $prog: "
                success
            fi
            RETVAL=$?
        fi
        echo
        return $RETVAL
    }
    
    reload() {
        echo -n $"Reloading $prog: "
        echo
    }
    
    # See how we were called.
    case "$1" in
      start)
        start
        ;;
      stop)
        stop
        ;;
      status)
        status -p $pidfile $eg_daemon
        RETVAL=$?
        ;;
      restart)
        stop
        start
        ;;
      force-reload|reload)
        reload
        ;;
      *)
        echo $"Usage: $prog {start|stop|restart|force-reload|reload|status}"
        RETVAL=2
    esac
    
    exit $RETVAL

    参考:

    http://blog.csdn.net/mjhmjhmjh123/article/details/22954831

    https://blog.csdn.net/zhaihaifei/article/details/70213431

    https://www.jianshu.com/p/76ecdea99ac7

  • 相关阅读:
    作品-系统-[原生开发]新蓝景CRM管理系统
    作品-网站-[二次开发]汇名惠商城
    js声明json数据,打印json数据,遍历json数据,转换json数据为数组
    js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
    js转换数据类型为浮点型,并取两位小数点
    php判断是否是微信客户端的浏览器访问
    百度地图API地理位置和坐标转换
    php 对象中连贯执行方法
    php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容
    php 获取远程图片保存到本地
  • 原文地址:https://www.cnblogs.com/shengulong/p/8327942.html
Copyright © 2011-2022 走看看