用 Python 写一个常驻守护进程

现在有个需求,希望能够实现一个 Python 启动的进程,运行在后台,支持优雅重启。

按照参考资料 1 的介绍,我写了一个简单的验证脚本,发现在终端打开的情况下进程可以运行,当终端关掉后,进程就退出了,也无法捕获输出任何错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# -*- coding: utf-8 -*-

import os
import sys
import atexit
import time
import threading

def ps_daemon(pid_file = None):
# 从父进程 Fork 子进程出来
pid = os.fork()
if pid:
sys.exit(0)

os.chdir('/')
os.umask(0)
os.setsid()

sys.stdout.flush()
sys.stderr.flush()

if pid_file:
with open(pid_file, 'w+') as f:
f.write(str(os.getpid()))
atexit.register(os.remove, pid_file)

ps_spider()

def ps_spider():
while True:
print("Happly Little spider")
time.sleep(5)

ps_daemon()

参考资料

  1. Python 实现守护进程
  2. Python 守护进程实现过程详解
  3. Python中的守护进程daemon实现

cocowool

A FULL STACK DREAMER!