【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/bashdate >> /root/date.txt
进入下面目录
cd /etc/systemd/system
创建xxx.service文件
vim myauto.service
myauto.service内容:
[Unit]Description=Run a Custom Script at StartupAfter=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 5echo "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运行级别、开机启动脚本的说明 - 追梦的飞飞 - 博客园
相关文章:
【ubuntu】linux开机自启动
目录 开机自启动: /etc/rc.loacl system V 使用/etc/rc*.d/系统运行优先级 遇到的问题: 1. Linux 系统启动阶段概述 方法1:/etc/rc5.d/ 脚本延时日志 方法二:使用 udev 规则来触发脚本执行 开机自启动: /etc/…...
dnf install openssl失败的原因和解决办法
网上有很多编译OpenSSL源码(3.x版本)为RPM包的文章,这些文章在安装RPM包时都是执行rpm -ivh openssl-xxx.rpm --nodeps --force 这个命令能在缺少依赖包的情况下能强行执行安装 其实根据Centos的文档,安装RPM包一般是执行yum install或dnf install。后者…...
Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新
一、Java AI 的底层逻辑:从语言特性到生态重构 在 Python 占据 AI 开发主导地位的当下,Java 正通过技术重构实现突围。作为拥有 30 年企业级开发经验的编程语言,Java 的核心优势在于强类型安全、内存管理能力和分布式系统支持,这…...
操作系统导论——第19章 分页:快速地址转换(TLB)
使用分页作为核心机制来实现虚拟内存,可能会带来较高的性能开销。使用分页,就要将内存地址空间切分成大量固定大小的单元(页),并且需要记录这些单元的地址映射信息。因为这些映射信息一般存储在物理内存中,…...
计算机网络:流量控制与可靠传输机制
目录 基本概念 流量控制:别噎着啦! 可靠传输:快递必达服务 传输差错:现实中的意外 滑动窗口 基本概念 换句话说:批量发货排队验收 停止-等待协议 SW(发1份等1份) 超时重传:…...
SaaS、Paas、IaaS、MaaS、BaaS五大云计算服务模式
科普版:通俗理解五大云计算服务模式 1. SaaS(软件即服务) 一句话解释:像“租用公寓”,直接使用现成的软件,无需操心维护。 案例:使用钉钉办公、在网页版WPS编辑文档。服务提供商负责软件更新和…...
计算机网络 - 三次握手相关问题
通过一些问题来讨论 TCP 协议中的三次握手机制 说一下三次握手的大致过程?为什么需要三次握手?2 次不可以吗?第三次握手,可以携带数据吗?第二次呢?三次握手连接阶段,最后一次ACK包丢失…...
通过使用 include 语句加载并执行一个CMake脚本来引入第三方库
通过使用 include 语句加载并执行一个CMake脚本来引入第三方库 当项目中使用到第三方库时,可以通过使用 include 语句来加载并执行一个CMake脚本,在引入的CMake脚本中进行第三方库的下载、构建和库查找路径的设置等操作,以这种方式简化项目中…...
架构生命周期(高软57)
系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么?二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么? 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…...
JMeter使用
1.简介 1.1 打开方式 ①点击bat,打开 ②添加JMeter系统环境变量,输⼊命令jmeter即可启动JMeter⼯具 1.2 配置 简体中文 放大字体 1.3 使用 ①添加线程组 ②创建http请求 2. 组件 2.1 线程组 控制JMeter将⽤于执⾏测试的线程数,也可以把⼀个线程理解为⼀个测…...
Ant Design Vue 表格复杂数据合并单元格
Ant Design Vue 表格复杂数据合并单元格 官方合并效果 官方示例 表头只支持列合并,使用 column 里的 colSpan 进行设置。 表格支持行/列合并,使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染。 <temp…...
Fiddler为什么可以看到一次HTTP请求数据?
1、作为代理服务器 Fiddler作为代理服务器,拦截了设备与互联网服务器之间的所有HTTP和HTTPS流量。当客户端(如浏览器)发送请求时,请求先到达Fiddler,然后由Fiddler转发到目标服务器;服务器的响应也会返回给…...
第十九讲 | XGBoost 与集成学习:精准高效的地学建模新范式
🟨 一、为什么要学习集成学习? 集成学习(Ensemble Learning) 是一种将多个弱学习器(如决策树)组合成一个强学习器的策略。它在地理学、生态学、遥感分类等领域表现尤为突出。 📌 应用优势&#…...
基于 GoFrame 框架的电子邮件发送实践:优势、特色与经验分享
1. 引言 如果你是一位有1-2年Go开发经验的后端开发者,可能已经熟悉了Go语言在性能和并发上的天然优势,也曾在项目中遇到过邮件发送的需求——无论是用户注册时的激活邮件、系统异常时的通知,还是营销活动中的批量促销邮件,邮件功…...
ECharts 如何实现柱状图悬停时,整个背景区域均可触发点击事件
1. 前言 ECharts 柱状图的点击事件默认仅响应柱子本身的点击,本文旨在实现整个背景区域均可触发点击事件 2. 实现思路 核心:全局监听 坐标判断 数据转换 通过 getZr() 监听整个画布点击,结合像素坐标判断是否在图表区域内通过 containPi…...
金融简单介绍及金融诈骗防范
在当今社会,金融学如同一股无形却强大的力量,深刻影响着我们生活的方方面面。无论是个人的日常收支、投资理财,还是国家的宏观经济调控,都与金融学紧密相连。 一、金融学的概念 金融学,简单来说,是研…...
cursor+高德MCP:制作一份旅游攻略
高德开放平台 | 高德地图API (amap.com) 1.注册成为开发者 2.进入控制台选择应用管理----->我的应用 3.新建应用 4.点击添加Key 5.在高德开发平台找到MCP的文档 6.按照快速接入的步骤,进行操作 一定要按照最新版的cursor, 如果之前已经安装旧的版本卸载掉重新安…...
软件版本命名规范Semantic Versioning
语义化版本控制(Semantic Versioning,简称 SemVer)是一种广泛采用的版本号管理规范,旨在通过版本号传达软件更新的性质和影响,帮助开发者和用户理解每次发布的变更内容 🔢 版本号结构 语义化版本号通常采…...
Uniapp: 大纲
目录 一、基础巩固1.1、Uniapp:下拉选择框ba-tree-picker1.2、Uniapp:确认框1.3、Uniapp:消息提示1.4、Uniapp:获取当前定位坐标 二、项目配置2.1、Uniapp:修改端口号2.2、Uniapp:本地存储 一、基础巩固 1.1、Uniapp:…...
Kubernetes控制平面组件:API Server Webhook 授权机制 详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
【KWDB 创作者计划】_产品技术解读_1
【KWDB 创作者计划】_产品技术解读_1 一、存储引擎:高性能混合存储架构1. 存储模型设计2. 存储压缩与编码3. 持久化策略二、KWDB 组件源码解析1. 核心模块分层架构2. 关键组件源码剖析三、KWDB 特性代码通读1. 实时分析能力(Real-Time OLAP)2. 混合负载隔离(HTAP)3. 智能索…...
Python Cookbook-6.2 定义常量
任务 你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…...
【Python爬虫】简单案例介绍2
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后,接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务:如何实现跨页爬取…...
【神经网络】python实现神经网络(四)——误差反向传播的基础理论
一.反向传播 本章将介绍能够高效计算权重参数的梯度的方法——误差反向传播法,这里简单介绍一下什么是反向传播,加入有个函数y = f(x),那么它的反向传播为图下这个样子: 反向传播的计算顺序是,将输入信号E乘以节点的局部导数,然后将结果传递给下一个节点。这里所…...
【SQL】COUNT... FILTER 的适用场景
【SQL】COUNT... FILTER 的适用场景 一、引言二、FILTER 基础学习2.1 语法解析2.2 适用范围2.2.1 主流数据库支持情况 2.3 技术优势2.3.1 性能优化2.3.2 等阶写法对比 2.4 适用场景2.4.1 多维统计报表2.4.2 动态数据过滤2.4.3 复杂条件处理 三、总结 一、引言 今天参加业务评审…...
I/O进程(全)
I/O 一、标准IO 1.概念 在C库中定义的一组用于输入输出的函数 2.特点 (1).通过缓冲机制减少系统调用,提高效率 (2.)围绕流进行操作,流用FILE *来描述(3).标准IO默认打开了三个流,stdin(标准输入)、stdout(标…...
vue2使用ezuikit-js播放萤石视频
需求:需要在大屏上播放萤石视频,用到官方的ezuikit-js插件实现,并实现视频播放切换功能。有个问题至今没有解决,就是萤石视频的宽高是固定的,不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…...
什么是Lodash
一、什么是lodash 在 JavaScript 开发中,Lodash 是一个非常受欢迎的实用工具库,旨在提供高效、模块化的实用函数,帮助开发者更轻松地处理数组、对象、字符串等常见数据结构。它是对 JavaScript 原生方法的增强和优化,它在开发中提…...
【笔试强训day19】
目录 第一题:小易的升级之路 描述 输入描述: 输出描述: 输入: 输出: 第二题:礼物的最大价值 描述 输入: 返回值: 备注: 第三题:对称之美 题目描述…...
STM32电机库 电机控制特性
ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...
