首页IT科技用python写管理系统(Python的Daemon管理器zdaemon)

用python写管理系统(Python的Daemon管理器zdaemon)

时间2025-09-17 05:44:34分类IT科技浏览10541
导读:Python的Daemon管理器-zdaemon 作者:...

Python的Daemon管理器-zdaemon

作者:

日期:

gashero 2009-09-07

1简介

经常开发服务器程序                    ,所以一个强悍的daemon托管程序很重要                             ,之前用过的最靠谱的方式就是twisted自带的twistd了                    。不过想要让它托管         ,需要对程序做大量的修改才行                    ,实在是不方便                             。

总得来说需求是:能够启动进入daemon模式                              ,能够记录所有屏幕打印日志和异常日志         。

zdaemon是ZOPE项目的子项目之一                    。

项目主页: http://pypi.python.org/pypi/zdaemon

注意:如果安装时没有ez_setup.py那套东西         ,安装完成以后就没有zdaemon命令                              。

2命令接口

zdaemon的主要入口是一个 zdaemon 程序         。

提供的子命令如下:

start

:启动进程作为daemon stop

:停止进程 restart

:重启进程 status

:查看进程运行状态 foreground

或 fg

:运行程序 kill signal

:发送signal到daemon进程 reopen_transcript

:重新打开日志 help command

:显示命令的帮助

3命令行控制

前台启动          ,-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

4使用配置文件管理

简历配置文件                              ,指定程序:

$ 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

5参考文档

以下参数可以用于配置文件的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的日志输出通常没什么意思                    ,但是你可以用于调试。

如果 directory

选项存在                             ,则切换到那个目录 重定向 stdin、stdout                              、stderr到/dev/null 调用setsid()         ,以便作为会话的主进程 调用umask()
声明:本站所有文章                    ,如无特殊说明或标注                              ,均为本站原创发布                              。任何个人或组织         ,在未征得本站同意时          ,禁止复制                             、盗用、采集                    、发布本站内容到任何网站                             、书籍等各类媒体平台                             。如若本站内容侵犯了原著者的合法权益                              ,可联系我们进行处理。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
膝关节置换lcck全称(fsaa.exe是什么进程 有什么作用 fsaa进程查询) jdk dns缓存(解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手)