项目开发完成后通常需要让程序开机启动,在配置过程中踩了一些坑,记录一下配置过程。
基本原理是将启动Python的脚本语句添加到rc.local中,这个文件可以理解为开机自启动的脚本,默认以root用户运行,而平时开发通常用pi用户,使用pip安装的模块也都在pi用户的目录下,两者是独立的。类似于windows下为所有用户安装和仅为当前用户安装的选项。因此直接在rc.local中使用python xxx.py来运行会出现找不到模块的错误。针对该问题有以下几种解决方式:
使用sudo pip安装模块,即为root用户安装。
使用venv虚拟环境,在运行前激活相应环境,事实上这是最优雅的方式。
运行时使用sudo -u username的方式,指定用户运行python,如
sudo -u pi python3 /home/pi/wkdir/main.py #尽量使用绝对路径,python程序中同样需要注意相对路径问题
完整的配置步骤如下
编辑/etc/rc.local文件,在exit 0前添加使用指定用户运行Python的命令,可以把相关初始化命令写在一个startup.sh文件中统一执行。
sudo systemctl daemon-reload 更新配置文件缓存
sudo systemctl restart rc.local-service 重启自启动服务,观察是否生效
通过sudo systemctl status rc.local-service 观察服务运行状态,是否有错误信息