用于守护进程的Python代码? [复制]

2024-02-16

任何人都可以分享一个有效的代码片段来守护 python 中的进程吗?


From http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

(回溯链接 https://web.archive.org/web/20160305151936/http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, os, time, atexit
from signal import SIGTERM 

class Daemon:
    """
    A generic daemon class.

    Usage: subclass the Daemon class and override the run() method
    """
    def __init__(self, pidfile, stdin='/dev/null', 
        stdout='/dev/null', stderr='/dev/null'):
        self.stdin = stdin
        self.stdout = stdout
        self.stderr = stderr
        self.pidfile = pidfile

    def daemonize(self):
        """
        do the UNIX double-fork magic, see Stevens' "Advanced 
        Programming in the UNIX Environment" for details (ISBN 0201563177)
        http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
        """
        try: 
            pid = os.fork() 
            if pid > 0:
                # exit first parent
                sys.exit(0) 
        except OSError, e: 
            sys.stderr.write(
                "fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
            sys.exit(1)

        # decouple from parent environment
        os.chdir("/") 
        os.setsid() 
        os.umask(0) 

        # do second fork
        try: 
            pid = os.fork() 
            if pid > 0:
                # exit from second parent
                sys.exit(0) 
        except OSError, e: 
            sys.stderr.write(
                "fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
            sys.exit(1) 

        # redirect standard file descriptors
        sys.stdout.flush()
        sys.stderr.flush()
        si = file(self.stdin, 'r')
        so = file(self.stdout, 'a+')
        se = file(self.stderr, 'a+', 0)
        os.dup2(si.fileno(), sys.stdin.fileno())
        os.dup2(so.fileno(), sys.stdout.fileno())
        os.dup2(se.fileno(), sys.stderr.fileno())

        # write pidfile
        atexit.register(self.delpid)
        pid = str(os.getpid())
        file(self.pidfile,'w+').write("%s\n" % pid)

    def delpid(self):
        os.remove(self.pidfile)

    def start(self):
        """
        Start the daemon
        """
        # Check for a pidfile to see if the daemon already runs
        try:
            pf = file(self.pidfile,'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None

        if pid:
            message = "pidfile %s already exist. Daemon already running?\n"
            sys.stderr.write(message % self.pidfile)
            sys.exit(1)

        # Start the daemon
        self.daemonize()
        self.run()

    def stop(self):
        """
        Stop the daemon
        """
        # Get the pid from the pidfile
        try:
            pf = file(self.pidfile,'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None

        if not pid:
            message = "pidfile %s does not exist. Daemon not running?\n"
            sys.stderr.write(message % self.pidfile)
            return # not an error in a restart

        # Try killing the daemon process    
        try:
            while 1:
                os.kill(pid, SIGTERM)
                time.sleep(0.1)
        except OSError, err:
            err = str(err)
            if err.find("No such process") > 0:
                if os.path.exists(self.pidfile):
                    os.remove(self.pidfile)
            else:
                print str(err)
                sys.exit(1)

    def restart(self):
        """
        Restart the daemon
        """
        self.stop()
        self.start()

    def run(self):
        """
        You should override this method when you subclass Daemon. 
        It will be called after the process has been
        daemonized by start() or restart().
        """
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于守护进程的Python代码? [复制] 的相关文章

  • 需要根据数据框中的行号应用不同的公式

    我正在努力在数据框中找到某种移动平均值 该公式将根据正在计算的行数而变化 实际场景是我需要计算Z列 Edit 2 以下是我正在使用的实际数据 Date Open High Low Close 0 01 01 2018 1763 95 176
  • 函数名称未定义

    我有一段代码 看起来像这样 if name main main def main print hello 但是 当我尝试运行此代码时 出现错误 NameError 名称 main 未定义 我是否没有在函数 def main 的第一行定义名称
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • 在 python 中发送标头[重复]

    这个问题在这里已经有答案了 我有以下 python 脚本 我想发送 假 标头信息 以便我的应用程序就像 Firefox 一样运行 我怎么能这么做呢 import urllib urllib2 cookielib username passw
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 将二进制数据视为文件对象?

    在此代码片段 由另一个人编写 中 self archive是一个大文件的路径并且raw file是以二进制数据形式读取的文件内容 with open self archive rb as f f seek offset raw file s
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前

随机推荐

  • 如何确保java8流中的处理顺序?

    我想处理里面的列表XMLjava 对象 我必须确保处理所有元素才能收到它们 因此我应该打电话给sequential在各个stream I use list stream sequential filter forEach 或者只要我不使用并
  • 在 Three.js 中使用 renderOrder

    我想在场景中有两个重叠的对象 但我想定义应该首先绘制哪个对象 我这里有一个代码示例 http jsfiddle net sg02e5sm 1 http jsfiddle net sg02e5sm 1 我在用着renderOrder 1对于第
  • iPhone 应用程序在 didFinishLaunchingWithOptions 之前崩溃

    我的 iPhone 应用程序工作正常 但每当我在设备或模拟器上运行它时 它就会突然崩溃 并且它不会在日志中向我报告任何有用的信息 它只会记录以下无用的信息 2014 02 05 17 09 34 069 TeacherAssistant 7
  • 如何对Dataframe的多列执行单一操作

    我有以下数据框 df gt gt gt TSLA MSFT 2017 05 15 00 00 00 00 00 320 68 2017 05 16 00 00 00 00 00 319 69 2017 05 17 00 00 00 00 0
  • contenteditable .execCommand() 未触发?

    我正在尝试使用 contenteditable 自定义所见即所得编辑器 我使用以下代码使所选文本变为粗体 wysiwyg b click function document execCommand bold false true alert
  • Python C 互操作性

    我希望将现有的 C 纯 C 即非 C 库包装到 Python 中 以便我可以从 Python 脚本中调用它 各种可用的方法 C Api SWIG 等 中哪种方法最合适 与 Ctypes 一起使用 它是标准发行版的一部分并且运行良好 基本上你
  • CSS - 翻转一个元素,并使另一个元素可见

    在CSS中 当我滚动一个元素时 是否有可能使另一个元素可见 我有一个图标 当有人将鼠标悬停在它上面时 我希望它显示一个描述该图标功能的文本元素 这是我一直使用的纯 CSS 工具提示 效果很好 即使在 IE 中也是如此 a hover bac
  • 2TB CSV 中的帐号匿名化

    我有大约 2TB 的 CSV 其中第一个2 列包含两个身份证号码 这些数据需要匿名 以便数据可用于学术研究 匿名化可以 但不一定 是不可逆的 这些不是医疗记录 所以我不需要最奇特的加密算法 问题 标准哈希算法会生成很长的字符串 但我必须进行
  • 如何在SQL Server中生成随机数据

    我想创建一个存储过程来在 视频 表中插入随机数据 我已经为 UserProfile 表生成了 30 000 条记录数据 注 用户名是视频表中的FK元素 CREATE TABLE UserProfile Username VARCHAR 45
  • 为什么我们不能在 C# 中使用 Iterator StateMachine 属性?

    I did a Go To Definition F12 on a class I was trying to derive from and I noticed that one of the methods was marked wit
  • 当手机锁定/应用程序未打开时,推送通知振动不起作用

    向应用程序发送的推送通知始终会发送 这不是问题 问题是 仅当应用程序打开且手机未锁定时 如果从应用程序收到新通知 手机就会振动 如果应用程序未打开或手机已锁定 手机将不会在收到通知时振动 有没有办法让手机收到通知时振动 即使它被锁定或应用程
  • 带有嵌套聚合的 Elasticsearch 查询导致内存不足

    我安装了 Elasticsearch 内存为 16GB 我开始使用聚合 但当我尝试发出以下查询时遇到 java lang OutOfMemoryError Java堆空间 错误 POST test index syslog3 type sy
  • QuickBlox 2.0 聊天对话框 - 如何检测用户加入或离开群聊对话框?

    从版本 1 2 4 更新到版本 2 0 时 我遇到了 QuickBlox 问题 在2 0版本中如何检测用户加入或离开群聊对话框 在版本 1 2 4 中我使用 ParticipantListener 但版本 2 2 QBGroupChat 无
  • Google Colab Pro+ 断开连接并停止执行,并且只允许一个会话

    我的笔记本随机断开连接并停止执行 它应该将文件发送到云端硬盘 但会停止并且不会重新连接 另外 截至今天 它一次只允许我进行一次会话 我以为极限更多了 我已经检查过了 我仍然活跃在 Pro 计划中 大约一周前我才支付了该计划 这会影响我的所有
  • jQuery UI 1.7.1 叠加点击时模态关闭

    我试图覆盖 jQuery UI 模式对话框的默认行为 以在单击覆盖层时关闭该框 下面的代码将在我第一次打开对话框并单击叠加层后关闭该对话框 当我再次打开对话框时 单击叠加层没有任何反应 我在这里错过了一个活动 有人可以指出我在这里做错了什么
  • 如何将 JpaTemplate 的使用从 Spring 3.2 迁移到 4.1.4?

    我们目前已配置并运行 Spring 3 2 9 RELEASE 几年 需要迁移到 4 1 4 RELEASE 我们有一个抽象 DAO 类 它扩展了org springframework orm jpa support JpaDaoSuppo
  • JavaScript 随机数一/零实现

    您好 我发现这段 JS 代码生成零或一 我不明白这里如何涉及管道 ORing var randomNum Math random 2 0 1 1 random number between 0 and 1 我找到了另一种方法 Math fl
  • 使用标准库将循环替换为 strtok

    我有一个 strtok 解决的问题 从字符串中分割子字符串 但我 意识到 strtok 不安全 我想使用 C 标准库的一些更现代的部分 我应该用什么来代替 static int ParseLine std string line std s
  • rvest 使用 javascript 进行网页抓取

    我正在尝试从中获取每日天气预报五三十八 https projects fivethirtyeight com election 2016 national primary polls democratic using rvest 但我感兴趣
  • 用于守护进程的Python代码? [复制]

    这个问题在这里已经有答案了 任何人都可以分享一个有效的代码片段来守护 python 中的进程吗 From http www jejik com articles 2007 02 a simple unix linux daemon in p