RK3568 开机自动执行脚本失败问题分析

背景

本次问题是基于一个目的:需要板子在启动时自动执行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系统的更新一般都会伴随着指令集的变更,因此,建议在无果时尝试从官网文档中寻找答案。

注意:以上开机自启动的后面还有一些文件系统的挂在操作,因此,在实际的项目开发过程中,还是需要深入研究这个自启动服务,是否可以设置执行的阶段。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RK3568上开机启动shell脚本的方法如下所示: 1. 首先,在系统的init.rc文件中添加以下内容: ``` service myshell /system/bin/myshell.sh user root group root disabled on property:sys.boot_completed=1 start myshell ``` 这段代码会启动一个名为myshell的服务,并在系统启动完成后执行`/system/bin/myshell.sh`脚本。 2. 然后,创建一个名为myshell.te的文件,将其放置在`device/rockchip/common/sepolicy`目录下,并添加以下内容: ``` type myshell, domain; type myshell_exec, exec_type, file_type; init_daemon_domain(myshell) allow myshell init_tmpfs:file create_file_perms; allow myshell self:capability { dac_override net_admin net_raw setgid setuid }; allow myshell device:dir { open read }; allow myshell shell:lnk_file { read }; allow myshell rootfs:lnk_file { getattr }; allow myshell socket_device:sock_file { write }; allow myshell shell_exec:file { getattr read}; allow myshell fuse:dir { search write add_name getattr}; allow myshell fuse:file { create write open getattr}; allow myshell system_file:file { execute_no_trans}; ``` 这段代码是为了授权myshell脚本执行所需的功能和权限。 通过以上步骤,你可以在RK3568上实现开机启动shell脚本的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android系统10 RK3399 init进程启动(四十四) 实战Android开机自启动脚本](https://blog.csdn.net/ldswfun/article/details/128279000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [RK3399 Android 添加开机启动shell脚本](https://blog.csdn.net/weixin_41720013/article/details/120034087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值