背景
本次问题是基于一个目的:需要板子在启动时自动执行pyenv的环境变量生效功能,不然每次都要手动执行,目前的RK3288使用的Ubuntu是18.04版本,使用网上的init.d的方式始终不会开机自动执行。
问题分析
通过半天的查询发现启动自动执行脚本对于Ubuntu18.04并不能使用init.d方式,需要使用systemd,systemctl命令来实现开机自启动功能,并且对于环境变量需要预先添加到profile和environment这两个文件中。
开机自启动实现
第一步:
先修改/lib/systemd/system/rc-local.service文件,一般只需要添加如下脚本中的Install部分。
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
第二步:创建/etc/rc.local脚本文件,并将自己要开机自启动执行的脚本程序填到该文件中,格式如下:
#! /bin/bash
###此处执行你自己的脚本
echo "This is your bash" > &1
第三步:修改第二步创建的文件rc.local的权限
sudo chmod +x /etc/rc.local
第四步:这一步至关重要,建议先删除/etc/systemd/system/rc-local.service这个文件,否则即使后面的指令成功了,那么执行的也是之前添加的脚本,也就是说对于二次编辑的情况必须要先清除这个文件。
第五步:启动开机自启动服务
sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
到此,执行reboot重启系统,就可以看到启动自动执行成功。
添加环境变量
由于pyenv的生效主要是需要添加到两个环境变量中:
1.添加到系统路径环境变量PATH中,编辑/etc/environment;
2.添加PYENV_ROOT环境变量,将其添加到/etc/profile的最后面即可;
总结
到此,经过半天的努力终于完成了开机自启动的预研工作,整体的感受是,Linux系统的更新一般都会伴随着指令集的变更,因此,建议在无果时尝试从官网文档中寻找答案。
注意:以上开机自启动的后面还有一些文件系统的挂在操作,因此,在实际的项目开发过程中,还是需要深入研究这个自启动服务,是否可以设置执行的阶段。