将任何命令行转换为带有pidfile和start、stop、restart和status命令的守护进程。

daemoncmd的Python项目详细描述


##简介

我对作为守护进程运行命令的第一次介绍如下:

nohup my command--myoption myarg>;/dev/null 2>;/dev/null&;

虽然这对做一些开发工作很有好处,但一个合适的守护进程需要
会发生的。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(因为这是唯一的v它的版本已经过了测试。)





<<


<<
<35<35<35 <35 <35<

下载并安装python vagrant:









git clone git@git@git@git hub.com网站:toddeluca/daemoncmd.git
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能否使用OpenJPA将一个实体持久化到多个持久化单元?   java如何访问当前按下的键   java singleton是否意味着哈希代码总是返回相同的值?   inputstream无法在Java中同时使用STDIN和STDERR读取程序输出   java运行时有多贵。getRuntime()与获取内存度量相结合   java AndroidStudio ListView适配器更新   java小程序请求未扩展实时会话   java是设置布尔值所必需的关键部分?   java比较两个字符串,并突出显示发现的不匹配项   java带抽屉布局,无论哪个屏幕处于活动状态,如何在按下后退键时关闭应用程序?   爪哇:颜色有什么区别。黑色和彩色。黑色   Velocity模板中子类的java访问方法   java如何快速学习Drools或其他规则引擎   从Java应用程序访问时缓存数据库查询结果   java cassandra nodetool JPLISAgent。c错误   java我正在解析一个没有pubDate的RSS提要,有没有其他方法可以确定一个项目是何时发布的?