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 

这不会导致任何错误。

4

2 回答 2

2

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

解释Apple Developer 库:

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

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

于 2013-12-11T18:08:44.057 回答
0

你试过launchctl吗?

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

在 OS X 上后台运行 Python

于 2013-09-19T19:23:38.877 回答