linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录

这篇具有很好参考价值的文章主要介绍了linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

记一次踩坑记录!!!

接触到一个新的系统,需要在这个系统上跑程序,测试的时候,手动执行脚本和程序都没问题,于是将执行命令写入到linux启动脚本/etc/init.d/rcS这个文件中,然后重启,等待程序起来,但是让我意想不到的是,执行到我加的命令的时候,居然报错,找不到相关的脚本,于是我再次手动执行,发现能正常运行,这就让我奇怪,一开始还以为是系统还没完全起来,于是加了延时,可还是不行,检查了一下脚本的权限,都是没问题的,查了很久,才发现是环境变量的原因。

问题复现

首先我们在这个/opt/bin/这个路径下创建一个脚本test.sh,输入一下内容

#!/bin/sh

echo "hello world"

然后赋权限

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

然后切到根目录,直接执行脚本,可以执行

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

为什么可以执行呢,因为环境变量有这个路径,所以可以直接执行

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

接着我们在/etc/init.d/rcS中添加命令执行这个脚本

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

然后重启,等待脚本执行

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

结果找不到这个脚本,但是这个时候手动执行又没问题

问题分析

后面查了一下,发现/etc/init.d/rcS这个脚本的环境变量和我们登录终端的环境变量是不一样的,手动执行可以成功前面也说了,是因为有环境变量,那为什么登录终端会有环境变量呢?

这个是因为在 Linux 终端登录时,初始的环境变量通常是由 /etc/profile~/.bash_profile(或 ~/.bash_login~/.profile)文件中的配置所决定的。

其中,/etc/profile 文件是系统级别的配置文件,它会在所有用户登录时执行,并设置全局的环境变量。而 ~/.bash_profile(或 ~/.bash_login~/.profile)文件是用户级别的配置文件,它会在用户登录时执行,并设置用户级别的环境变量。

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

可以看到,/etc/profile这个文件里已经把/opt/bin这个路径添加到了环境变量,所以可以成功执行

所以同样的,如果想要/etc/init.d/rcS这个文件中也成功执行脚本,那也要添加环境变量

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

再次重启,成功执行

为什么rcs加到init.d里面了开机还是不运行,linux,arm开发,嵌入式硬件

总结

其实这个问题的原因并不复杂,环境变量这个东西对我来书并不陌生,只是对linux环境的一个机制并不熟悉,才会踩坑,不过通过这次的经历,对linux环境有了更进一步的熟悉,吃一堑长一智,linux的学习任重道远,想要成为一名合格的linux嵌入式工程师,还是得继续专研。文章来源地址https://www.toymoban.com/news/detail-810493.html

到了这里,关于linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决

    问题 Linux系统中,在rc.local里面配置的启动命令等不能能够在开机的时候进行自启动 问题解决 解决问题排查中最大的麻烦,需要进行reboot重启 查看rc-local的运行状态 systemctl status rc-local 如果是loaded或者是faild类似,说明启动确实出现了问题 首先查看检查是否还有rc.local的软连

    2024年02月16日
    浏览(39)
  • linux 之 shell脚本实现SFTP下载、上传文件、执行sftp命令

    需求方通过sftp不定时的上传一批用户(SBXDS_ACC_M_任务ID_yyyymmddHHMMSS.csv),需要我们从这些用户中找出满足条件的用户。然后把这些结果用户通过文件的形式上传到ftp。 ip1能连接hive库环境,不能连接sftp。 ip2不能连接hive库环境,能连接sftp。 ip1和ip2是共享盘,能同时访问公共目录

    2024年02月19日
    浏览(67)
  • macOS开机自启动执行脚本

    macOS由于没有 /etc/rc.local的文件,只有一个 rc.common,但是这个东西属于系统文件,不建议修改,我们可以打开软件“自动操作”来处理,“自动操作”是mac系统自带的软件 不用下载可以直接使用; 路径:资源库-实用工具-运行Shell脚本; 设置开机执行命令: 首次“运行”命令

    2024年02月03日
    浏览(53)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(72)
  • AWS实例启动时自动执行脚本

    修改每个实例的用户数据 实例 = 操作  =  实例设置  =  编辑用户数据 - [scripts-user, always]:重启也执行一遍这个脚本 /bin/echo \\\"Hello World\\\" /tmp/testfile.txt :此部分可以替换成你自己的脚本代码 注意:这个脚本任务是使用的 root用户 执行的,所以需要注意shell代码里 ~ 的路径指向

    2024年02月11日
    浏览(42)
  • 《ARM Linux内核源码剖析》读书笔记——0号进程(init_task)的创建时机

    最近在读《ARM Linux内核源码剖析》,一直没有看到0号进程(init_task进程)在哪里创建的。直到看到下面这篇文章才发现书中漏掉了set_task_stack_end_magic(init_task)这行代码。 下面这篇文章提到:start_kernel()上来就会运行 set_task_stack_end_magic(init_task)创建初始进程。init_task是静态定义的

    2024年01月17日
    浏览(63)
  • Android开机启动执行脚本的实现方法

    Android开机启动执行脚本的实现方法 在Android系统中,我们经常需要在设备开机时执行一些特定的操作,例如启动某个应用程序或执行一段脚本。本文将介绍一种实现在Android设备开机启动时执行脚本的方法。 要实现这个功能,我们需要创建一个初始化脚本,并将其添加到Andr

    2024年02月07日
    浏览(47)
  • jmeter命令执行脚本

    小结:         并发数怎么来的?         并发的TPS=总请求数/总时间 二八原则:并发的TPS=总请求数*0.8/总时间*0.2 稳定性测试的并发数:=有效总请求数*0.8/有效总时间*0.2 压力测试的并发数:峰值请求数/峰值时间*系数

    2024年01月25日
    浏览(45)
  • Mac Ventura 13设置开机启动执行Shell脚本

    一、编写Shell启动脚本 1.打开Mac聚焦搜索,搜索“自动操作”并打开 2.新建“应用程序” 3.运行Shell脚本拖拽到右侧  4.Shell类型改成/bin/sh后在下方输入脚本,并可以在右上角点击运行测试         如果命令中有用到密码输入,可以使用如下命令:         echo \\\"密码\\\" |

    2024年02月08日
    浏览(47)
  • 【Linux内核解析-linux-5.14.10-内核源码注释】内核启动kernel_init解释

    static int __ref kernel_init(void *unused) : 声明一个静态整型函数 kernel_init() ,该函数不会被其他文件访问,使用 __ref 标记表示该函数是可重定位的,并且该函数不需要任何参数。 wait_for_completion(kthreadd_done); : 等待 kthreadd 线程完成初始化, wait_for_completion() 函数会阻塞当前进程,直到

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包