You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的环境变量导出:
    #!/bin/bash
    export PATH="$PATH:/home/ubuntu/.local/bin"
    echo "hi"
    python -V
    python3 -V
    pipenv -h
    
    这样脚本运行时就会自动包含Pipenv所在的目录。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:48:51