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

树莓派4B通过Cron@reboot启动Python虚拟环境脚本失败求助

树莓派4B通过Cron @reboot启动Python虚拟环境脚本的问题解决

问题场景

在树莓派4B(Raspi OS x64)上,尝试通过Cron的@reboot命令开机启动Python虚拟环境中的脚本,测试脚本test.sh有两种写法:
写法一:

. envname/bin/activate
echo Hi Stackoverflow

写法二:

#!/bin/bash
. envname/bin/activate
echo Hi Stackoverflow

直接用sh test.sh执行脚本一切正常,但配置Cron开机启动:

@reboot sh /home/pi/test.sh >/home/pi/logs/cronlog 2>&1

时出现错误:

/home/pi/test.sh: 2: .: cannot open envname/bin/activate: No such file

补充说明:sh并非可行方案,Ubuntu默认使用bash而非sh,sh不支持source命令,bash用.替代source;同时怀疑开机启动时使用的shell可能和常规环境不同。

解决方法

1. 使用绝对路径指向虚拟环境

Cron执行@reboot任务时,默认工作目录不是用户的home目录,所以脚本里的相对路径envname/bin/activate会找不到文件。直接改用绝对路径即可解决:
修改test.sh内容:

#!/bin/bash
# 替换成你的虚拟环境绝对路径
. /home/pi/envname/bin/activate
echo Hi Stackoverflow
# 这里添加要执行的Python脚本命令,例如:
# python /home/pi/your_target_script.py

2. 让Cron使用bash执行脚本

脚本开头已经指定了#!/bin/bash,不要用sh去调用脚本,直接让Cron执行脚本本身(先给脚本添加执行权限):

  • 给脚本赋予执行权限:
chmod +x /home/pi/test.sh
  • 修改Cron配置:
@reboot /home/pi/test.sh >/home/pi/logs/cronlog 2>&1

这样Cron会遵循脚本指定的bash来执行,避免sh的兼容性问题。

3. 手动指定Cron的工作目录(可选)

如果坚持使用相对路径,可以在Cron命令中先切换到脚本所在目录:

@reboot cd /home/pi && sh /home/pi/test.sh >/home/pi/logs/cronlog 2>&1

不过前两种方法更稳定,优先推荐使用绝对路径的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:45:31