在Linux中守护python脚本最简单的方法是什么?我需要这适用于Linux的各种风格,所以它应该只使用基于python的工具.
请参阅史蒂文斯以及在activestate上的这个冗长的帖子,我个人发现这个帖子大部分都是不正确的,而且很冗长,我想出了这个:
from os import fork, setsid, umask, dup2 from sys import stdin, stdout, stderr if fork(): exit(0) umask(0) setsid() if fork(): exit(0) stdout.flush() stderr.flush() si = file('/dev/null', 'r') so = file('/dev/null', 'a+') se = file('/dev/null', 'a+', 0) dup2(si.fileno(), stdin.fileno()) dup2(so.fileno(), stdout.fileno()) dup2(se.fileno(), stderr.fileno())
如果您需要再次停止该过程,则需要知道pid,通常的解决方案是pidfiles.如果您需要,请执行此操作
from os import getpid outfile = open(pid_file, 'w') outfile.write('%i' % getpid()) outfile.close()
出于安全考虑,您可能会在妖魔化后考虑其中的任何一个
from os import setuid, setgid, chdir from pwd import getpwnam from grp import getgrnam setuid(getpwnam('someuser').pw_uid) setgid(getgrnam('somegroup').gr_gid) chdir('/')
您也可以使用nohup,但这对python的子进程模块不起作用