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

使用Shell脚本自动启动基于venv的Python程序报错排查

解决Shell脚本结合at命令运行venv虚拟环境Python程序时的source: not found错误

问题描述

希望通过Shell脚本结合at命令自动运行依赖venv虚拟环境的Python程序,手动在命令行激活venv正常,但脚本执行时出现如下错误:

run.sh: 7: source: not found

原脚本内容:

#!/bin/bash

# Path to your virtual environment activate script
VENV_PATH="/home/user/python/app/venv/bin/activate"

# Activate the virtual environment
source "$VENV_PATH"

# Run your Python program
python3 /home/user/python/app/main.py

解决方案

方案1:替换source为POSIX标准的点命令(.)

source是bash专属内置命令,而at默认可能使用/bin/sh执行脚本,部分sh环境不支持source,但POSIX标准的点命令.是通用的,修改脚本中的激活命令:

#!/bin/bash

# Path to your virtual environment activate script
VENV_PATH="/home/user/python/app/venv/bin/activate"

# Activate the virtual environment
. "$VENV_PATH"

# Run your Python program
python3 /home/user/python/app/main.py

方案2:强制at使用bash执行脚本

调用at时,明确指定用bash运行你的脚本,避免at默认使用sh:

at now + 1 minute <<EOF
bash /home/user/python/app/run.sh
EOF

方案3:直接调用虚拟环境内的Python解释器(推荐)

无需激活虚拟环境,直接使用venv目录下的Python解释器运行程序,彻底规避shell兼容问题:

#!/bin/bash

# 直接使用虚拟环境中的Python解释器执行程序
/home/user/python/app/venv/bin/python3 /home/user/python/app/main.py

问题原因

at命令默认使用系统默认shell(通常是/bin/sh)执行任务,即使脚本开头声明了#!/bin/bash,at仍可能忽略该shebang,改用sh运行。而sh中没有source内置命令(或部分环境不支持),因此触发source: not found错误。

内容的提问来源于stack exchange,提问作者user3188777

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:52:11