Crontab/Launchd:OSX用户权限、环境变量、Python虚拟环境

Crontab/Launchd:OSX用户权限、环境变量、Python虚拟环境,python,macos,cron,crontab,launchd,Python,Macos,Cron,Crontab,Launchd,我正试图在我的mac电脑上从虚拟环境中每分钟自动运行一个python脚本。我确信,我没有正确理解权限、路径和环境变量,这在某种程度上阻碍了我解决这个问题 我是启用了根权限的管理员用户。我运行HomeBrew、PIP和Virtualenv来管理不同项目的python包和虚拟环境 我希望每60秒执行以下操作: $ source /.virtualenvs/myenvironment/bin/activate $ cd ~/desktop/python/ $ python myscript.py $

我正试图在我的mac电脑上从虚拟环境中每分钟自动运行一个python脚本。我确信,我没有正确理解权限、路径和环境变量,这在某种程度上阻碍了我解决这个问题

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

我希望每60秒执行以下操作:

$ source /.virtualenvs/myenvironment/bin/activate
$ cd ~/desktop/python/
$ python myscript.py
$ deactivate  
我试过:

(a) 为Launchd编写我自己的plist——我相信这些文档格式良好

(b) 为您管理已启动的守护进程和代理(包括启动控制和Lingon)的程序

(c) 我尝试过简单地编辑crontab(只有在使用sudo命令时才允许)

python脚本使用命令,从在线源中提取数据并将其存储在sqlite表中。我可以看出cron没有运行,因为sqlite数据库没有被触动


任何想法都将不胜感激。

因此我仍然不确定为什么我不能配置Launchd或Crontab来为我工作:我仍然怀疑它与环境变量有关


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

您没有确切说明您使用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的脚本而设计的,可能无法在仅后台工作的情况下正常工作。

我遇到了完全相同的问题,最近解决了这个问题。感谢我所采取的步骤。基本上,它处理需要PYTHONPATH的shell,而不仅仅是路径。

您提供的代码是我在Launchd中使用plist脚本指向的shell文件的精确副本。它不起作用。我相信,因为使用自制和virtualenv管理python安装有不同的路径变量(但老实说,我不知道)。日志(/var/log/system.log)说什么?是否检查了stdout/stderr(在作业定义中设置
StandardOutPath
StandardErrorPath
键)?