如何将python程序作为守护进程运行?

时间:2013-09-10 12:40:47

标签: python macos python-2.7

我编写了以下程序来运行我的程序作为守护程序,但它没有运行;当我从python调试器运行程序时它工作。

我正在使用Mac os x。

/User/Library/LaunchDaemons/com.bobbob.osx.test.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.bobbob.osx.test</string>
<key>Program</key>
<string>/Users/vivekbhintade/Desktop/test.py</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

/Users/vivekbhintade/Desktop/test.py

import urllib2
from datetime import datetime
import smtplib
from smtplib import SMTPException
import threading

def checkerror():

    #my code which works fine individually, which sends mail after 5 seconds to recipients.

checkerror()

我还使用以下命令从终端运行程序。

launchctl load /Library/LaunchDaemons/com.bobbob.osx.test.plist 

这不会导致任何错误。

2 个答案:

答案 0 :(得分:2)

在发布后的3个月内,你几乎可以肯定地意识到这一点,但是 Launch Daemons Launch Agents 之间似乎存在一些混淆,我认为值得清理 - 特别是因为代理商通常被称为守护进程。

解释Apple Developer library:

  • 守护程序在启动时以root身份运行,无法呈现UI元素,位于/Library/LaunchDaemons/
  • 代理在登录时在用户上下文中运行,并且能够向用户呈现UI元素。它们位于/Users/username/Library/LaunchAgents/

您的程序不会像/User/Library中那样运行 - 它需要进入上述一个或另一个路径,具体取决于您打算如何使用它。

答案 1 :(得分:0)

您是否尝试过launchctl

我相信这个堆栈会回答你的问题:

Running Python in background on OS X