我想用launchd每分钟运行一个python脚本.我的plist文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.turtle.script.plist</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>/Users/turtle/Desktop/turtle.py</string>
<string>/Users/turtle/Desktop/data/data.txt</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
这个plist文件看起来不错,因为我得到以下内容:
plutil -lint com.turtle.script.plist
com.turtle.script.plist: OK
当我从命令行运行脚本时,脚本可以正常工作:
/usr/bin/python /Users/turtle/Desktop/turtle.py /Users/turtle/Desktop/data/data.txt
我通过以下方式加载此plist:
launchctl load -w -F com.turtle.script.plist
我也尝试过:
sudo launchctl load -w -F com.turtle.script.plist
我加载这个作业,python脚本应该写出一个文件到磁盘.但是没有生成任何文件.我检查了这份工作:
sudo launchctl list | grep com.turtle.script.plist
输出是:
- 1 com.turtle.script.plist
任何人都可以帮助解决问题吗?
解决方法:
这听起来像是脚本中存在一些环境依赖性 – 实质上,它假定它运行的环境是正确的,当你手动运行它时,而不是当launchd运行它时.在不了解脚本的情况下,很难指出这可能是什么,但我可以建议一些事情要看:
> sudo launchctl不是更强大的launchctl版本,它做了一些截然不同的事情.你需要弄清楚你想要哪一个,并使用它.
当您以普通用户身份运行launchctl时(例如,启动加载),它会与您的用户启动实例进行交互,以管理启动代理 – 在您的用户会话中以您的用户身份运行的项目.
当您以root用户身份运行launchctl时(例如sudo launchctl load),它会与launchd的系统实例进行交互,以管理Launch Daemons – 以root用户身份在系统上下文中运行的项目.
你必须根据这个脚本的作用来决定哪个是合适的.
>检查system.log(可以使用Console实用程序查看它,或者tail -f /var/log/system.log),看看它是否包含任何指示脚本失败原因的内容.
>在launchd .plist中添加条目以记录脚本的输出,并查看是否包含任何错误消息或其他错误指示:
<key>StandardOutPath</key>
<string>/tmp/turtle.out</string>
<key>StandardErrorPath</key>
<string>/tmp/turtle.err</string>
编辑脚本以添加调试输出可能会有所帮助,因此您可以更多地了解它是如何工作的(/不工作).
>脚本是否依赖于具有特定的工作目录和/或环境变量?如果是这样,请将适当的WorkingDirectory和/或EnvironmentVariables项添加到.plist.
标签:python,macos,launchd 来源: https://codeday.me/bug/20190613/1229475.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。