Crontab / Launchd:OS X用户权限,环境变量,Python Virtualenvs

时间:2013-07-07 22:41:45

标签: python macos cron crontab launchd

我正在尝试从虚拟环境中每分钟在我的mac上自动运行python脚本。我确信我没有正确理解权限,路径和环境变量,这些关键方式阻碍了我解决这个问题。

我是启用了root权限的管理员用户。我运行HomeBrew,PIP和Virtualenv来管理不同项目的python包和虚拟环境。

我想每60秒做一次以下事情:

$ source /.virtualenvs/myenvironment/bin/activate
$ cd ~/desktop/python/
$ python myscript.py
$ deactivate  

我试过了:

(a)为Launchd编写我自己的plist - 我相信这些文件格式正确。

(b)为您管理Launchd守护进程和代理程序的程序(Launch Control和Lingon)。

(c)我试过简单地编辑crontab(如果我使用sudo命令,只允许我)。

使用命令工作的python脚本从在线源中提取数据并将其存储在sqlite表中。我可以告诉cron没有运行,因为没有触及sqlite db。

任何想法都会受到极大的赞赏。

3 个答案:

答案 0 :(得分:4)

您没有准确说出您尝试使用launchd和cron的内容,但我敢打赌您没有正确使用其中任何一个。两者都面向运行单个独立命令(/程序),而不是shell命令序列。虽然可以使用单个cron作业或启动项执行此操作,但它会变得混乱。最简单的方法是编写一个执行所需序列的shell脚本(确保在开头包含一个shebang,并使用chmod +x /path/to/script启用脚本的执行权限),然后从cron或launchd运行该脚本:

#!/bin/bash
source /.virtualenvs/myenvironment/bin/activate
cd ~/desktop/python/
python myscript.py
deactivate

我不建议使用Automator来包装命令序列;它是为基于GUI的脚本设计的,可能无法在仅后台工作中使用。

答案 1 :(得分:2)

我遇到了同样的问题并且最近解决了这个问题。 Look here我采取的步骤。基本上它处理需要PYTHONPATH的shell,而不仅仅是PATH。

答案 2 :(得分:0)

所以我仍然不确定为什么我无法配置Launchd或Crontab为我工作:我仍然怀疑它与环境变量有关。

如果其他人在这个问题上遇到困难,我建议创建一个运行您想要运行的shell脚本的Automator应用程序,然后使用Lingon或Launch Control以您想要的任何频率运行Automator应用程序文件。 / p>