使用 pyenv 和 pipenv 时如何安排 crontab 作业
How schedule crontab job when using pyenv and pipenv
我在 Ubuntu 20.04,我在正确设置 crontab 时遇到问题,同时使用 pyenv
+ pipenv
。简单地将 pipenv run python script.py
添加到 cronjob 是行不通的;我认为这可能是由于:
pyenv
需要的环境
- cronjob
非交互式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
我尝试过的和知道的
- 直接指向 .profile 和 .bashrc 不起作用
run.sh
会 运行 没问题;失败的是pipenv
步骤
- 安排其他非 pipenv 命令工作正常
pyenv init
块
- 放置在
BASH_ENV
文件中,cronjob 根本 运行
- 放置在
run.sh
中,cronjob 现在 运行s,但 pipenv run
仍然失败
pipenv 相关
- 我试过 pipenv shell; which python 在 crontab 中使用那个 enjoy -- no cigar
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?
中有解释
我在 Ubuntu 20.04,我在正确设置 crontab 时遇到问题,同时使用 pyenv
+ pipenv
。简单地将 pipenv run python script.py
添加到 cronjob 是行不通的;我认为这可能是由于:
pyenv
需要的环境
- cronjob 非交互式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
我尝试过的和知道的
- 直接指向 .profile 和 .bashrc 不起作用
run.sh
会 运行 没问题;失败的是pipenv
步骤- 安排其他非 pipenv 命令工作正常
pyenv init
块
- 放置在
BASH_ENV
文件中,cronjob 根本 运行 - 放置在
run.sh
中,cronjob 现在 运行s,但pipenv run
仍然失败
pipenv 相关
- 我试过 pipenv shell; which python 在 crontab 中使用那个 enjoy -- no cigar
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?
中有解释