Python的Daemon管理器-zdaemon
作者:
gashero |
日期:
2009-09-07 |
经常开发服务器程序,所以一个强悍的daemon托管程序很重要,之前用过的最靠谱的方式就是twisted自带的twistd了。不过想要让它托管,需要对程序做大量的修改才行,实在是不方便。
总得来说需求是:能够启动进入daemon模式,能够记录所有屏幕打印日志和异常日志。
zdaemon是ZOPE项目的子项目之一。
项目主页: http://pypi.python.org/pypi/zdaemon
注意:如果安装时没有ez_setup.py那套东西,安装完成以后就没有zdaemon命令。
zdaemon的主要入口是一个 zdaemon
程序。
提供的子命令如下:
-
start
:启动进程作为daemon
-
stop
:停止进程
-
restart
:重启进程
-
status
:查看进程运行状态
-
foreground
或 fg
:运行程序
-
kill signal
:发送signal到daemon进程
-
reopen_transcript
:重新打开日志
-
help command
:显示命令的帮助
前台启动,-p选项指定要运行的程序:
$ zdaemon -p "echo hello world" fg
守护进程启动:
$ zdaemon -p "sleep 100" start
. .
daemon process started, pid=819
检查守护进程状态:
$ zdaemon -p "sleep 100" status
program running; pid=819
停止守护进程:
$ zdaemon -p "sleep 100" stop
. .
daemon process stopped
$ zdaemon -p "sleep 100" status
daemon manager not running
简历配置文件,指定程序:
$ cat zd.conf
<runner>
program sleep 100
</runner>
$ zdaemon -Czd.conf start
. .
daemon process started, pid=1136
$ zdaemon -Czd.conf stop
. .
daemon process stopped
这时会在当前目录产生文件 zdsock
,给zdaemon进行内部管理用。
配置文件中指定sock文件位置:
<runner>
program sleep 100
socket-name /tmp/demo.zdsock
</runner>
可以通过zdaemon传参数给应用程序:
$ cat zd.conf
<runner>
program sleep
socket-name /tmp/demo.zdsock
</runner>
$ zdaemon -Czd.conf start 100
. .
daemon process started, pid=1149
在配置文件中传递环境变量:
<runner>
program env
socket-name /tmp/demo.zdsock
</runner>
<environment>
LD_LIBRARY_PATH /home/foo/lib
HOME /home/foo
</environment>
在daemon运行时,程序的标准输入会被关闭,标准输出和错误输出会收到控制,可选的重定向到标准输出或文件。这一切由transcript选项控制,对于长时间运行的程序很必要。
看例子配置:
<runner>
program tail -f data
transcript log
</runner>
运行中可以对日志文件重命名,而因为zdaemon仍然打开那个文件,所以输出依旧会到那个文件中,哪怕名字改变了。这时可以告知zdaemon重新打开日志,这样就又可以输出到原来定义的日志文件那里了:
zdaemon -Czd.conf reopen_transcript
以下参数可以用于配置文件的runner段或命令行选项:
-
program
、命令行 -p
/ --program
:这个选项给出需要运行的程序
-
socket-name
、命令行 -s
/ --socket-name
:指定Unix套接字路径
-
daemon
、命令行 -d
/ --daemon
:如果为true则在后台运行,缺省为开启。子进程会做如下工作:
- 如果 directory
选项存在,则切换到那个目录
- 重定向 stdin、stdout、stderr到/dev/null
- 调用setsid(),以便作为会话的主进程
- 调用umask()
-
directory
、命令行 -z
/ --directory
:指定守护进程运行时所在目录
-
backoff-limit
、命令行 -b
/ --backoff-limit
:当子进程挂了,zdaemon会在1秒钟延时以后重启它。当子进程再次挂了,延时会再增加1秒。当延时增加到backoff-limit时,依赖于 forever
选项的值。如果 forever
为false,zdaemon会放弃并退出。一个经常挂掉的子进程,会限制只重启backoff-limit次。如果 forever
为true,zdaemon会继续尝试重启,保持backoff-limit的时延。如果子进程保持时间超过backoff-limit秒,延时会重置为1秒。缺省为10。
-
forever
、命令行 -f
或 --forever
:如果为true,则让挂掉的子进程一直重启,如果为false,则在backoff-limit次后放弃而退出。缺省为禁用。
-
exit-codes
、命令行 -x
或 --exit-codes
:如果子进程的退出代码在列表中,则zdaemon不会将其重启。默认值为 0,2
,分别代表正常结束和命令语法错误。这些情况下重启也没啥用。这个行为重载了 backoff-limit
和 forever
选项。想要禁用它,可以设置值为空列表。
-
user
、命令行 -u
或 --user
:当root使用zdaemon启动时,这个选项指定实际运行用户,参数可以用用户名或者用户ID。user和group都是从正确的密码入口使用 setuid()
和 setgid()
设置的。这个操作会在zdaemon的所有其他操作之前进行,除了命令行参数解析。注意当zdaemon不是以root启动时,指定这个选项会出错。注意事件日志会在 setuid()
之前调用,这个是好还是不好呢?
-
umask
、命令行 -m
或 --umask
:当使用守护进程时,用8进制指定umask。
-
default-to-interactive
、命令行 -i
或 --interactive
:如果指定了该选项为true,在没有附加命令参数时zdaemon进入交互模式。如果为false,你必须指定命令行参数才能进入交互模式。缺省启用。
-
logfile
:指定"logtail"命令的缺省日志文件。注意这不是zdaemon记录日志信息的日志文件。那个日志是由<eventlog>段描述的。
-
transcript
:记录副本日志的文件名,命令的所有输出副本会记录进去。如果没有指定命令输出会被丢弃。仅在daemon选项有效时才有效。
-
prompt
:控制程序使用的提示符。缺省由应用提供。
(注意,一些其他选项仅对旧配置文件有效,但是不再需要了,而且会被忽略。)
除了在runner段,还可以使用eventlog段指定日志文件:
<eventlog>
<logfile>
path /var/log/foo/foo.log
</logfile>
<logfile>
path STDOUT
</logfile>
</eventlog>
这个例子中,日志被发送到文件和标准输出。zdaemon的日志输出通常没什么意思,但是你可以用于调试。
相关推荐
"commons-daemon-1.2.2-bin.tar.gz" 是一个包含Java相关组件的压缩包,主要用于支持Tomcat服务器的运行。Apache Commons Daemon是Apache软件基金会的一个项目,它提供了一个跨平台的服务守护进程,允许Java应用程序...
首先,我们来看`commons-daemon-1.2.0-bin.tar.gz`和`commons-daemon-1.2.0-src.tar.gz`这两个文件。`bin`版本包含了预编译的二进制文件,包括`jsvc`,可以直接在支持的平台上运行。而`src`版本则包含源代码,允许...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
资源分类:Python库 所属语言:Python 资源全名:python-daemon-1.5.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
赠送jar包:commons-daemon-1.0.13.jar; 赠送原API文档:commons-daemon-1.0.13-javadoc.jar; 赠送源代码:commons-daemon-1.0.13-sources.jar; 赠送Maven依赖信息文件:commons-daemon-1.0.13.pom; 包含翻译后...
资源分类:Python库 所属语言:Python 资源全名:python-daemon-2.2.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
官方离线安装包,亲测可用
官方离线安装包,亲测可用
资源分类:Python库 所属语言:Python 资源全名:python-daemon-1.5.7.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
"commons-daemon-1.0.15-bin"是该项目的1.0.15版本的二进制发行包,包含了运行Java守护进程所需的所有文件。 在Unix系统中,守护进程通常是一个在后台运行的进程,不与终端关联,启动后可以独立于用户会话存在。而...
离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
赠送jar包:commons-daemon-1.0.13.jar; 赠送原API文档:commons-daemon-1.0.13-javadoc.jar; 赠送源代码:commons-daemon-1.0.13-sources.jar; 赠送Maven依赖信息文件:commons-daemon-1.0.13.pom; 包含翻译后...
官方离线安装包,亲测可用
官方离线安装包,亲测可用