什么是最简单的守护Linux中的python脚本的方法?我需要它能适用于Linux的各种风格,所以它应该只使用基于python的工具。在Linux中守护python脚本的最简单方法是什么?
10
A
回答
21
见Stevens也是这个lengthy thread on 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's subprocess module
4
0
使用grizzled.os.daemonize工作安全原因:
$ easy_install grizzled
>>> from grizzled.os import daemonize
>>> daemon.daemonize()
要了解它如何工作或自己完成,请阅读the discussion on ActiveState。
1
如果你不关心实际的讨论(这些讨论往往偏离主题而不提供权威的回答),你可以选择一些库,这会让你的讨论更加容易。我会推荐看看ll-xist,这个库包含大量救命的代码,比如cron作业助手,守护进程框架,(对你来说什么都不感兴趣,但真的很棒)面向对象的XSL( ll-xist本身)。
2
我最近使用Turkmenbashi:
$ easy_install turkmenbashi
import Turkmenbashi
class DebugDaemon (Turkmenbashi.Daemon):
def config(self):
self.debugging = True
def go(self):
self.debug('a debug message')
self.info('an info message')
self.warn('a warning message')
self.error('an error message')
self.critical('a critical message')
if __name__=="__main__":
d = DebugDaemon()
d.config()
d.setenv(30, '/var/run/daemon.pid', '/tmp', None)
d.start(d.go)
相关问题
- 1. 什么是“分离/守护进程”Bash脚本的最简单方法?
- 2. 将python脚本放入系统托盘的最简单方法是什么(Windows)
- 3. 计算python脚本执行时间的最简单方法是什么?
- 4. 在Windbg脚本中分配数据的最简单方法是什么?
- 5. 什么是在asp.net中保护目录的简单方法?
- 6. python修改linux配置文件最简单的方法是什么?
- 7. 用python执行WHOIS协议最简单的方法是什么?
- 8. 使用Python进行SSH的最简单方法是什么?
- 9. 用Python安装OpenVAS omblib最简单的方法是什么?
- 10. 在Python中创建“runner”脚本的最佳方式是什么?
- 11. 获取XmlElement顶级文本的最简单方法是什么?
- 12. MVC2:什么是从文本框回发最简单的方法
- 13. 区分Windows版本的最简单方法是什么?
- 14. 用瓶子调用python脚本:最好的方法是什么?
- 15. 在VB.net中保存设置的最简单方法是什么
- 16. 在webkit中清除浮动的最简单方法是什么?
- 17. 在C中测试空值的最简单方法是什么?
- 18. 在WPF中播放MP3最简单的方法是什么?
- 19. 在java中构建IDE最简单的方法是什么?
- 20. 在ES6中包装Promise的最简单方法是什么?
- 21. 在C++中生成xml最简单的方法是什么?
- 22. 在iPhone OS中使用SQLite3最简单的方法是什么?
- 23. 在C中抓取网页的最简单方法是什么?
- 24. 在c#中加密文件最简单的方法是什么?
- 25. 在C#中获取OutOfMemoryException的最简单方法是什么?
- 26. 在XNA中定位相机的最简单方法是什么?
- 27. 在Java中创建GUI的最简单方法是什么?
- 28. 在Objective-C中否定BOOL的最简单方法是什么?
- 29. Java守护程序的初始化脚本更简单?
- 30. 在python中实现fprintf的简单方法是什么?
一注 - 请提供一种方法来在前台运行您的程序,既为调试和谁喜欢过程的监督工具(如runit人[HTTP:/ /smarden.org/runit]或daemontools [http://cr.yp.to/daemontools.html])来运行你的程序作为监督服务而不是守护进程。 – 2009-09-21 18:32:25
是的,我同意(我正在使用daemontools) – edomaur 2009-09-21 21:34:58
相关:[你如何在Python中创建一个守护进程?](http://stackoverflow.com/q/473620/4279) – jfs 2012-10-27 02:13:15