将任何命令行转换为带有pidfile的守护进程

daemonpy3的Python项目详细描述



即将发生的事情。wikipedia页面
http://en.wikipedia.org/wiki/daemon\(computing)指出需要
发生以下情况:

-与控制tty分离
-成为会话负责人
-成为过程组负责人
-通过分叉和退出(一次或多次)作为后台任务执行两次。有时,为了使流程成为会话领导者,需要这样做。它还允许父进程继续其正常执行。
-将根目录("/")设置为当前工作目录,以便
进程不会保留任何正在使用的目录,这些目录可能位于装入的文件
系统上(允许卸载它)。
-更改umask到0以允许open()、creat()等。操作系统
调用以提供自己的权限掩码,而不依赖于调用方
的umask-在执行时关闭父进程打开的所有继承文件,包括文件描述符0、1和2(stdin、stdout、
stderr)。稍后将打开所需的文件。
-使用日志文件、控制台或/dev/null作为stdin、stdout和stderr

另外,在monit或initd下运行进程时,通常会将守护进程的进程id存储在文件中,这样守护进程就可以被
监视和ki很容易填充。

最后,通常使用"start"、"stop"、"restart"和"status"命令来控制后台程序。


daemoncmd负责以正确的方式创建后台程序,将其pid放入
文件中,并通过"start"、"stop"等命令与后台程序交互。
简单到:

/path/to/daemoncmd start--pidfile/tmp/mydaemon.pid/path/to/mycommand

有关python中的守护进程和守护进程的详细信息,请参阅使用部分。

thon.org/dev/peps/pep-3143/
-http://aspn.activestate.com/aspn/cookbook/python/recipe/66012
-http://en.wikipedia.org/wiki/daemon\(computing)



/2.0.4,请参见http://ridingpython.blogspot.cz/2011/08/将python脚本转换为linux.html
以获取说明。
-https://github.com/indexzero/forever

以一种比简单地启动自己的守护进程更健壮和功能更全的方式访问。下面是其中一些
的列表(请参见http://news.ycombinator.com/item?id=1368855供讨论):

-launchd http://launchd.macosforge.org/
-upstart http://upstart.ubuntu.com/
-monit http://monnit.com/monit/
-supervisord http://supervisord.org/
-daemontools http://cr.yp.to/daemontools.html
-daemonize http://bmc.github.com/daemonize/
-运行http://smarden.sunsite.dk/runit/
-perp http://bnelix.net/perp/

对于生产系统,我建议使用类似这样的工具。我以前用过监督和监视。其中一些工具与守护进程一起工作,比如
monit,在这种情况下,daemoncmd可能会派上用场。其他工具,如supervisord,可以以一种不需要对其进行daemonize的方式来监督您的过程。




\contribution

>如果此项目没有按您的要求执行,请在github上打开一个问题或请求,https://github.com/toddeluca/daemoncmd.


需求

-可能是python 2.7(因为这是o只测试了一个版本的版本。










<
<
从pypi.python.org下载并安装daemoncmd:


pip install daemoncmd


















cd daemoncmd
python setup.py install



\usage


>此模块有两种不同的使用情况:

-将命令作为守护进程运行
-将当前python进程作为守护进程分叉。

e启动、停止和重新启动非守护进程
命令作为守护进程。这需要指定一个pid文件,该文件用于与进程交互。


用法示例:

--stdout/tmp/daemon.log--stderr/tmp/daemon.log sleep 100
daemoncmd restart--pidfile/tmp/daemon.pid\
--stdout/tmp/daemon.log--stderr/tmp/daemon.log sleep 100
daemoncmd status--pidfile/tmp/daemon.pid
daemoncmd stop--pidfile/tmp/daemon.pid

另一个用例将当前进程分叉为一个守护进程。根据pep 3143,作为守护进程的forking可以在某一天由标准库完成。




用法示例:


import daemoncmd
import mytask


daemoncmd.daemonize()
mytask.doit()

aemoncmd,mytask;daemoncmd.daemonize();mytask.doit()'


其他用法说明:

-该命令不应对自身进行daemonize,因为这是该脚本所做的
,它将使pidfile中的pid不正确。
-该命令应引用可执行文件的绝对路径,因为
后台监控将当前工作目录(CWD)设置为"/"。一般来说,不要假设cwd是什么。
-如果daemoncmd由monit等运行,出于安全原因,path和其他env vars可能会受到限制。
-daemoncmd不会尝试将守护进程作为特定uid运行。这将由进程管理器处理,如monit、launchd、init、god等。
-在monit下运行时,将环境变量传递给命令
,如下所示:

foo=testing daemoncmd start--pidfile/tmp/daemon.pid\
--stdout/tmp/daemon.log prin天福








欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ContentExchange设置请求属性   java Spark/Hdfs/Hdfsclient兼容性   java springcloudstreamkafka配置:instanceCount和instanceIndex   Java中web服务序列化日期   java用动态数据替换占位符   java git gc似乎覆盖了一个packfile,留下了一个打开的文件描述符,其中包含对“oldxxx.pack”的引用   为什么Apache项目对Java版本敏感?   java Anylogic帮助如何在导入的3dobject通过输送机上的多个“站”时更改其颜色?   JavaEclipseNeonM2E可以导入一个大型项目,但似乎不能自动解决依赖关系   java@FindBy搜索具有满足条件的子元素的元素   java如何将ActionEvent e与键绑定一起使用?   java转换以集中方式从外部库抛出的异常   java中用户文件/数据文件与系统/程序文件的区别   java使用变量字符串或字符作为对象名   字体使用Java图形操纵字符串中每个字符的形状   JavaFX图表移动数据   java RandomAccessFile:将所有项设置为相同的字节数?   java Google Play inapp Billing onPurchasesUpdated()错误响应代码1   java在不知道属性名和属性数的情况下处理json对象   java是否可以一次从HazelcastInstance(映射和列表)中删除所有数据?