使用 anaconda env 运行 crontab 作业

新手上路,请多包涵

我想让 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 岁一样向我解释。

原文由 stoebelj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 959
2 个回答

不要打电话给 shbashsource 是一个 bash 命令。

     - sh scripts/my_script.bash
    + bash scripts/my_script.bash

要不就

    chmod +x scripts/my_script.bash
    ./scripts/my_script.bash

因为你添加了 bash shebang。

原文由 Jérôme 发布,翻译遵循 CC BY-SA 4.0 许可协议

我最近从 canopy 切换到 Anaconda 正是为了避免在 cron 作业中激活 env。 Anaconda 基于 PATH 环境变量使这变得非常简单。 (我使用的是 miniconda 而不是完整的 Anaconds 安装,但我相信 anaconda 应该以同样的方式工作)

我测试过两种不同的方法;

  • 在你的 python 脚本 main.py 中添加一个 shebang

#!/home/users/user_name/miniconda2/envs/my_env/bin/python

  • 将 PATH 添加到 crontab 的顶部

PATH=/home/users/user_name/miniconda2/envs/my_env/bin

更新:

Jérôme 的回答和 cbarrick 的评论是正确的。我刚刚在需要 pynco, 的 Conda env 中使用上述方法被烧毁,它需要完整的 conda 环境才能找到正确的 nco 命令,例如 ncks, ncrcat. 通过从首先调用 conda activate 的 cron 运行 bash 脚本。

原文由 Eric Bridger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题