【问题标题】:Python-daemon how it worksPython 守护进程是如何工作的
【发布时间】:2013-06-25 10:13:21
【问题描述】:

我被困住了,需要帮助。

我正在使用 python-daemon 包来守护程序。问题是我不知道如何启动和停止守护进程。

当我跑步时

python myscript.py start

创建了一个新进程。但是,当我运行 stop 时,什么也没有发生。

# Setting logging configuration
logger = logging.getLogger("MyScript")

logger.setLevel(logging.DEBUG)

formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler = logging.FileHandler("/tmp/myscript.log")
handler.setFormatter(formatter)
logger.addHandler(handler)

pid = daemon.pidlockfile.TimeoutPIDLockFile("/tmp/myscript.pid", 10)
context = daemon.DaemonContext(
    #working_directory='/var/lib/foo',
    umask=0o002,
    pidfile=pid,
    files_preserve=[handler.stream],
    )

loop = True
def program_cleanup_test():
    logger.info("Stopping loop")
    loop = False

context.signal_map = {
    signal.SIGTERM: program_cleanup_test,
    signal.SIGHUP: 'terminate',
    #signal.SIGUSR1: reload_program_config,
    }

print "Running as a daemon"
with context:
    while loop:
        logger.info("0255")
        time.sleep(5)

【问题讨论】:

标签: python daemon


【解决方案1】:

尝试向它发送信号。如果您发送 SIGTERM,您的函数 program_cleanup_test() 将被调用。如果您发送 SIGHUP,您的守护程序将终止。

这个 shell 命令发送信号:

kill [-s signal] PID

所以你可以运行:

kill -s TERM your_daemon_pid

这应该运行你的 program_cleanup_test() 函数。

我希望这会有所帮助。


你也不需要使用:
python myscript.py start

只是:

python myscript.py

因为开始转到 sys.argv[1] 并且不会更改您的脚本。如果你想知道什么是sys.argv,这里有一个很好的解释:https://stackoverflow.com/a/4118133/4898487

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多