当前位置: 首页 > news >正文

【ubuntu】linux开机自启动

目录

开机自启动:

/etc/rc.loacl

system V

使用/etc/rc*.d/系统运行优先级

遇到的问题:

1. Linux 系统启动阶段概述

方法1:/etc/rc5.d/ 脚本延时+日志

方法二:使用 udev 规则来触发脚本执行


开机自启动:

/etc/rc.loacl

有的系统没有这个文件

直接把执行脚本的命令写到这个文件末尾即可。

system V

查看该linux系统是否支持system V

systemd --version

编写开机启动需要执行的mydemo.sh:

#!/bin/bash

date >> /root/date.txt

 进入下面目录

cd /etc/systemd/system

创建xxx.service文件 

vim myauto.service

 myauto.service内容:

[Unit]
 
Description=Run a Custom Script at Startup
 
After=default.target
 
 
[Service]
 
ExecStart=/root/mydemo.sh
 
 
[Install]
 
WantedBy=default.target

 加载到硬盘上:

systemctl daemon-reload

#设置自启动
#设置myauto.service服务自启动:
sudo systemctl enable myauto.service

然后会自动创建一个软连接。手动测试一下:

#【1】
#开启myauto.service服务:
sudo systemctl start myauto.service

#【2】
reboot

注意:shell脚本的 #!/bin/bash 或者 #!/bin/sh 一定不能省略。否则服务不能启动,但是单独运行脚本是可以的。

下图时自动创建的一个软连接:

使用/etc/rc*.d/系统运行优先级

c0.d 到 rc6.d 分别对应系统运行级别的0到6:
rc0.d:关机。
rc1.d:单用户模式。
rc2.d 至 rc5.d:多用户模式,在大多数Linux发行版中,级别3或5用于图形界面启动(取决于具体的配置)。
rc6.d:重启。
rcS.d:用于系统启动时的特殊初始化过程。

查看当前系统运行在哪个级别上面

runlevel

 

把脚本放在/etc/init.d/下:

在对应的rcN.d下创建软连接:(当然也可以在rcS.d中创建软连接。)当自启动时,运行级别时N时,就会执行rcN.d下面的脚本。

注意软连接名字最好是:S[num]<service>. 因为自启动时,是按照S后面的数字来顺序执行的。

ln -s /etc/init.d/mydemo S02mydemo

自启动运行流程:

遇到的问题:

把pwm初始化的脚本放到/etc/rc5.d下面,不能自启动,猜测pwm硬件没有初始化,就执行了这个脚本。

rcN.d 脚本运行时,某些用户空间工具或服务可能尚未启动(如 udev 或 sysfs 文件系统未完全挂载)。

所以自启动脚本要是有操作硬件方面的,不推荐使用rcN.d的方式添加自启动脚本。

1. Linux 系统启动阶段概述

Linux 系统的启动过程可以分为以下几个主要阶段(以现代系统为例):

  • 内核加载和初始化

    • 内核解压缩并加载硬件驱动。
    • 初始化核心子系统(如内存管理、设备树解析、文件系统等)。
    • 加载硬件驱动(包括 PWM 驱动)。
  • 用户空间初始化

    • 内核启动第一个用户空间进程(通常是 init 或 systemd)。
    • 执行系统初始化脚本(如 SysVinit 的 rcN.d 脚本或 Systemd 的服务单元)。
  • 运行级别切换和服务启动

    • 根据默认运行级别,执行对应的启动脚本(如 rcN.d 中的脚本)。
    • 启动用户定义的服务和应用程序。
dmesg | grep -i pwm        //查看内核加载时,pwm硬件的加载情况
dmesg | grep -i backlight

方法1:/etc/rc5.d/ 脚本延时+日志

依旧使用/etc/rc5.d/的方法执行自启动文件。

在脚本的最前面,加延时,并设置一个日志文件。

#!/bin/bash
sleep 5

echo "Starting PWM initialization at $(date)" >> /var/log/pwm-init.log

方法二:使用 udev 规则来触发脚本执行

udev 是 Linux 系统中的设备管理器,它在系统启动时以及运行过程中动态管理设备节点。udev 规则允许用户自定义如何处理硬件设备的识别、命名和权限设置等。通过编写 udev 规则文件,可以实现对特定硬件设备的自动化配置,例如自动挂载存储设备、加载驱动程序或执行脚本。

这样,当 febf0010.pwm 设备被添加到内核时,脚本会自动执行。

  • 在基于设备树(Device Tree)的系统中,febf0010 通常是 PWM 控制器的基地址(Base Address),定义在设备树中。
ls -l /sys/class/pwm/            //查看pwm类
ls /sys/bus/platform/devices/    //查看平台所有设备

udev规则添加: 

/etc/udev/rules.d/99-pwm.rules    //添加udev规则

 内容如下:


ACTION=="add", SUBSYSTEM=="platform", KERNEL=="febf0010.pwm", RUN+="/path/to/your/script.sh"

重启结果:

参考:

linux下添加简单的开机自启动脚本 - 与f - 博客园

关于Ubuntu运行级别、开机启动脚本的说明 - 追梦的飞飞 - 博客园

相关文章:

  • [250414] ArcoLinux 项目宣布逐步结束
  • 探索机器人创新技术基座,傅利叶开源人形机器人 Fourier N1
  • VS 中Git 中本地提交完成,没有推送,修改的内容如何还原
  • 【Python爬虫】详细工作流程以及组成部分
  • 数据结构---跳表
  • 每日一道leetcode(回来了!!!)
  • 信息系统项目管理师-工具名词解释(上)
  • A2A协议实现详解及示例
  • 深入解析Java中的双向队列(Deque):操作、实现与应用
  • Django 开发服务器
  • n8n AI工作流平台使用教程
  • #MES系统中的一些相关的名词
  • Linux命令-vim编辑
  • 2025年Q1 AI 学习应用总结
  • 8.8.1 简易计算器
  • css一些注意事项
  • 【linux】使用LNMP环境+Discuz论坛源程序
  • Excel处理控件Aspose.Cells指南:使用 Python 删除 Excel 中的重复行
  • Web Worker 中的 DedicatedWorkerGlobalScope 对象
  • LeetCode hot 100—搜索二维矩阵
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 中共中央、国务院关于表彰全国劳动模范和先进工作者的决定
  • 伊朗港口爆炸已致46人死亡
  • 事关稳就业稳经济,10张海报看懂这场发布会的政策信号
  • 四川落马厅官周海琦受审,1000多人接受警示教育
  • 国内生产、境外“游一圈”再进保税仓,这些“全球购”保健品竟是假进口