使用 pyenv 和 pipenv 时如何安排 crontab 作业

How schedule crontab job when using pyenv and pipenv

我在 Ubuntu 20.04,我在正确设置 crontab 时遇到问题,同时使用 pyenv + pipenv。简单地将 pipenv run python script.py 添加到 cronjob 是行不通的;我认为这可能是由于:

  1. pyenv
  2. 需要的环境
  3. cronjob
  4. 非交互式shell

更新了大问题

如何在crontab中正确使用/home/jennings/.pyenv/shims/pipenv

我已经在 crontab 计划的 run.sh 中检查了 $?pipenv -v,但它失败了。

https://github.com/pyenv/pyenv#advanced-configuration

00。 (供参考)Bash启动

pyenv 需要这些启动文件中的这些条目 interactive/login shells 我不明白如何将其转换为非交互式 cronjob 调用。如何设置我的 BASH_ENV 以模拟下面的这些环境?

# ~/.profile
eval "$(pyenv init --path)"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi
# ~/.bashrc:
export PYENV_ROOT="$HOME/.pyenv"

我。定时任务

我正在尝试有效地为 cronjob 编写 .profile...但是如果您有更好的解决方案,请告诉我。

# CRONTAB

SHELL=/bin/bash
BASH_ENV="home/jennings/.custom_bash_env
# BASH_ENV="home/jennings/.profile"
# BASH_ENV="home/jennings/.bashrc"
* * * * * cd $PROJECT_DIR; ./run.sh

#BASH_ENV:

Should I point to .profile or .bashrc instead?*

# PYENV
#eval "$(pyenv init --path)"
#if command -v pyenv 1>/dev/null 2>&1; then
#  eval "$(pyenv init --path)"
#fi

# ENV VARIABLES
PYENV_ROOT="/home/jennings/.pyenv"
PYTHONPATH=$SOMEPLACE
PATH=all:of:them:paths

二.项目文件夹

#run.sh:

#!/usr/bin/bash
# PYENV
eval "$(pyenv init --path)"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi
# actual pipenv command I'm trying to run
pipenv run python main.py

#main.py:

import this
# Does some python and logging

我尝试过的和知道的

pyenv init

pipenv 相关

Cron 的环境有限。您必须声明 pipenv 可执行文件的完整路径。而不是使用 pipenv run python script.py 你应该使用 /usr/local/bin/pipenv run python script.py.

在您的情况下,完整路径可能不同 which pipenv 将为您提供正确的路径。

这在posthow to run pipenv in cronjob in ubuntu?

中有解释