我想让cron作业使用一个已经存在的名为my env的anaconda python环境执行一个python脚本。我唯一能想到的是让cron作业运行一个名为my_script.bash
的脚本,然后激活env并运行python脚本。
#!/bin/bash
source activate my_env
python ~/my_project/main.py
尝试从命令行执行此脚本无效:
$ sh scripts/my_script.bash
scripts/my_script.bash: 9: scripts/my_script.bash: source: not found
我需要做什么来确保正确的环境被激活。像我5岁那样向我解释是可以的。
在我的例子中,当我运行这行shell脚本时出现了这个错误:
source activate my_env
activate: No such file or directory
所以我把
source activate my_env
改成source /path/to/conda/bin/activate my_env
。然后开始工作。我最近从canopy切换到Anaconda正是为了避免在cron作业中激活env。 基于路径环境变量,Anaconda使这一点非常简单。(我使用的miniconda不是完整的水蟒安装程序,但我相信水蟒应该以相同的方式工作)
有两种不同的方法,我已经测试过了
在python脚本中添加一个shebang,main.py
#!/home/users/user_name/miniconda2/envs/my_env/bin/python
将路径添加到crontab的顶部
PATH=/home/users/user_name/miniconda2/envs/my_env/bin
更新:
杰罗姆的回答和卡布里克的评论是正确的。我刚刚在Conda环境中使用了上述方法,这个环境需要
pynco,
,而这个环境需要完整的Conda环境来找到合适的nco
命令,例如ncks, ncrcat.
,通过从cron运行bash脚本来解决,cron首先调用Conda activate。不要调用
sh
,而是调用bash
。source
是bash命令。或者只是
因为你加了一个猛击。
相关问题 更多 >
编程相关推荐