Ubuntu中如何在Cron作业中运行已通过pip3安装的Pipenv?
在Ubuntu Cron作业中运行Pipenv的解决方法
我来帮你搞定这个问题——你遇到的核心问题是Cron的环境变量PATH和普通用户会话的PATH不一样,它默认不会包含~/.local/bin目录,而你通过pip3安装的Pipenv正好放在这个路径下,所以Cron找不到它。
下面是几种可行的解决办法:
1. 直接使用Pipenv的绝对路径调用
你提到的路径提示应该是笔误,正确的Pipenv路径是/home/ubuntu/.local/bin/pipenv。直接修改你的test.sh脚本,把pipenv -h替换成绝对路径调用:
/home/ubuntu/.local/bin/pipenv -h
这样Cron就能精准定位到Pipenv的执行文件,不会再出现找不到命令的问题。
2. 给Cron或脚本添加完整的PATH环境变量
如果不想每次都写长路径,你可以手动把~/.local/bin加入到PATH中:
- 修改Cron任务配置:
把你的Cron定时任务行改成下面这样,先指定包含用户本地bin目录的PATH:21 * * * * PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/ubuntu/.local/bin cd /home/ubuntu/test; /bin/sh test.sh > /home/ubuntu/test.out 2>&1 - 在脚本开头设置PATH:
直接在test.sh的最上方添加PATH的环境变量导出:
这样脚本运行时就会自动包含Pipenv所在的目录。#!/bin/bash export PATH="$PATH:/home/ubuntu/.local/bin" echo "hi" python -V python3 -V pipenv -h
3. 确认Pipenv的实际路径(可选)
如果你不确定Pipenv的准确路径,可以在普通用户终端里执行下面的命令:
which pipenv
它会输出Pipenv的绝对路径(比如/home/ubuntu/.local/bin/pipenv),把这个路径直接用到脚本里就万无一失了。
为什么会出现这个问题?
Cron运行时的环境变量非常精简,默认的PATH只包含系统级的bin目录;而通过pip3 install --user(这是pip3的默认安装方式)安装的工具,都会被放到用户目录下的~/.local/bin,这个目录不在Cron的默认PATH里,所以就会触发"command not found"的错误。
内容的提问来源于stack exchange,提问作者beehuang
相关产品推荐
相关产品推荐

