当前位置:  开发笔记 > 编程语言 > 正文

Python守护程序打包最佳实践

如何解决《Python守护程序打包最佳实践》经验,为你挑选了4个好方法。

我有一个用python编写的工具,通常应该作为守护进程运行.打包此工具以进行分发的最佳做法是什么,尤其是如何处理设置文件和守护程序可执行文件/脚本?

相关的是,是否有任何常用的工具可以设置守护进程在开机时运行,以适合给定的平台(即linux上的init脚本,windows 上的服务,osx上的launchd)?



1> Ali Afshar..:

我找到的帮助init.d脚本的最佳工具是"start-stop-daemon".它将运行任何应用程序,监视运行/ pid文件,在必要时创建它们,提供停止守护程序的方法,设置进程用户/组ID,甚至可以后台处理您的进程.

例如,这是一个可以启动/停止wsgi服务器的脚本:

#! /bin/bash

case "$1" in
  start)
    echo "Starting server"

    # Activate the virtual environment
    . /home/ali/wer-gcms/g-env/bin/activate

    # Run start-stop-daemon, the $DAEMON variable contains the path to the
    # application to run
    start-stop-daemon --start --pidfile $WSGI_PIDFILE \
        --user www-data --group www-data \
        --chuid www-data \
        --exec "$DAEMON"
    ;;
  stop)
    echo "Stopping WSGI Application"

    # Start-stop daemon can also stop the application by sending sig 15
    # (configurable) to the process id contained in the run/pid file
    start-stop-daemon --stop --pidfile $WSGI_PIDFILE --verbose
    ;;
  *)
    # Refuse to do other stuff
    echo "Usage: /etc/init.d/wsgi-application.sh {start|stop}"
    exit 1
    ;;
esac

exit 0

您还可以看到如何将它与virtualenv一起使用的示例,我总是建议这样做.



2> Van Gale..:

为了回答你问题的一部分,我所知道的任何工具都不会在Linux系统中进行便携式设置,更不用说Windows或Mac OS X.

大多数Linux发行版现在似乎都start-stop-daemon在init脚本中使用,但是你仍然会在文件系统布局和包装方面存在很大差异.如果您的项目都是Python,则使用autotools/configure或distutils/easy_install将大大简化为不同的Linux/BSD发行版构建软件包的过程.

Windows是一个完全不同的游戏,需要Mark Hammond的win32扩展以及Tim Golden的WMI扩展.

我不知道Launchd,除了"以上都不是"是相关的.

有关守护Python脚本的提示,我会查看在现实世界中实际执行此操作的Python应用程序,例如在Twisted内部.



3> fulmicoton..:

互联网上有许多片段,用于在纯python中编写守护进程(无bash脚本)

http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ 看起来很干净......

如果你想自己编写,
原理与bash守护进程函数相同.

基本上:

一开始:

你分叉到另一个进程

打开日志文件以重定向stdout和stderr

保存pid某处.

停止时:

您将SIGTERM发送到pid文件中存储pid的进程.

使用signal.signal(signal.SIGTERM,sigtermhandler),您可以将停止过程绑定到SIGTERM信号.

我不知道任何广泛使用的包这样做.



4> juj..:

查看Ben Finney的守护进程模块.他已经开始编写一个针对python 3.X的PEP:

http://www.python.org/dev/peps/pep-3143/

但是这里已经有了一个实现:

http://pypi.python.org/pypi/python-daemon/

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有