这篇文章上次修改于 2027 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

最近写了个商品价格定时查询的小程序,部署到树莓派上做开机启动。

在使用python命令运行时一切正常,当写到 rc.local 文件中时遇到这个问题。

首先要查看日志,通过在 rc.local 文件头将:

#!/bin/sh

修改为

#!/bin/sh -x

日志输出到 var/log/boot.log 文件中

通过查看 boot.log 文件发现报错 ImportError

这个问题就有点诡异了,后来通过查询,得知原因所在,真得是很难想到

“用户”

因为 rc.local 是由 root 用户运行的,而我一直是在一个叫 pi 的用户下安装环境,部署程序,所以在开机启动时,rc.local 中执行时在 root 这个用户下查找 python 的环境,包引用,所以出现了 ImprtError:No module named xxx 。

解决

将:

/usr/bin/python3 /home/pi/xxxxxxx.py

修改为

sudo -H -u pi /usr/bin/python3 /home/pi/xxxxxxx.py

使用指定的用户运行脚本


2019/3/4.

Dean.King

Beijing