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

【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开机自启动

目录 开机自启动&#xff1a; /etc/rc.loacl system V 使用/etc/rc*.d/系统运行优先级 遇到的问题&#xff1a; 1. Linux 系统启动阶段概述 方法1&#xff1a;/etc/rc5.d/ 脚本延时日志 方法二&#xff1a;使用 udev 规则来触发脚本执行 开机自启动&#xff1a; /etc/…...

dnf install openssl失败的原因和解决办法

网上有很多编译OpenSSL源码(3.x版本)为RPM包的文章&#xff0c;这些文章在安装RPM包时都是执行rpm -ivh openssl-xxx.rpm --nodeps --force 这个命令能在缺少依赖包的情况下能强行执行安装 其实根据Centos的文档&#xff0c;安装RPM包一般是执行yum install或dnf install。后者…...

Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新

一、Java AI 的底层逻辑&#xff1a;从语言特性到生态重构 在 Python 占据 AI 开发主导地位的当下&#xff0c;Java 正通过技术重构实现突围。作为拥有 30 年企业级开发经验的编程语言&#xff0c;Java 的核心优势在于强类型安全、内存管理能力和分布式系统支持&#xff0c;这…...

操作系统导论——第19章 分页:快速地址转换(TLB)

使用分页作为核心机制来实现虚拟内存&#xff0c;可能会带来较高的性能开销。使用分页&#xff0c;就要将内存地址空间切分成大量固定大小的单元&#xff08;页&#xff09;&#xff0c;并且需要记录这些单元的地址映射信息。因为这些映射信息一般存储在物理内存中&#xff0c;…...

计算机网络:流量控制与可靠传输机制

目录 基本概念 流量控制&#xff1a;别噎着啦&#xff01; 可靠传输&#xff1a;快递必达服务 传输差错&#xff1a;现实中的意外 滑动窗口 基本概念 换句话说&#xff1a;批量发货排队验收 停止-等待协议 SW&#xff08;发1份等1份&#xff09; 超时重传&#xff1a;…...

SaaS、Paas、IaaS、MaaS、BaaS五大云计算服务模式

科普版&#xff1a;通俗理解五大云计算服务模式 1. SaaS&#xff08;软件即服务&#xff09; 一句话解释&#xff1a;像“租用公寓”&#xff0c;直接使用现成的软件&#xff0c;无需操心维护。 案例&#xff1a;使用钉钉办公、在网页版WPS编辑文档。服务提供商负责软件更新和…...

计算机网络 - 三次握手相关问题

通过一些问题来讨论 TCP 协议中的三次握手机制 说一下三次握手的大致过程&#xff1f;为什么需要三次握手&#xff1f;2 次不可以吗&#xff1f;第三次握手&#xff0c;可以携带数据吗&#xff1f;第二次呢&#xff1f;三次握手连接阶段&#xff0c;最后一次ACK包丢失&#xf…...

通过使用 include 语句加载并执行一个CMake脚本来引入第三方库

通过使用 include 语句加载并执行一个CMake脚本来引入第三方库 当项目中使用到第三方库时&#xff0c;可以通过使用 include 语句来加载并执行一个CMake脚本&#xff0c;在引入的CMake脚本中进行第三方库的下载、构建和库查找路径的设置等操作&#xff0c;以这种方式简化项目中…...

架构生命周期(高软57)

系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么&#xff1f;二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么&#xff1f; 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…...

JMeter使用

1.简介 1.1 打开方式 ①点击bat,打开 ②添加JMeter系统环境变量,输⼊命令jmeter即可启动JMeter⼯具 1.2 配置 简体中文 放大字体 1.3 使用 ①添加线程组 ②创建http请求 2. 组件 2.1 线程组 控制JMeter将⽤于执⾏测试的线程数&#xff0c;也可以把⼀个线程理解为⼀个测…...

Ant Design Vue 表格复杂数据合并单元格

Ant Design Vue 表格复杂数据合并单元格 官方合并效果 官方示例 表头只支持列合并&#xff0c;使用 column 里的 colSpan 进行设置。 表格支持行/列合并&#xff0c;使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时&#xff0c;设置的表格不会渲染。 <temp…...

Fiddler为什么可以看到一次HTTP请求数据?

1、作为代理服务器 Fiddler作为代理服务器&#xff0c;拦截了设备与互联网服务器之间的所有HTTP和HTTPS流量。当客户端&#xff08;如浏览器&#xff09;发送请求时&#xff0c;请求先到达Fiddler&#xff0c;然后由Fiddler转发到目标服务器&#xff1b;服务器的响应也会返回给…...

第十九讲 | XGBoost 与集成学习:精准高效的地学建模新范式

&#x1f7e8; 一、为什么要学习集成学习&#xff1f; 集成学习&#xff08;Ensemble Learning&#xff09; 是一种将多个弱学习器&#xff08;如决策树&#xff09;组合成一个强学习器的策略。它在地理学、生态学、遥感分类等领域表现尤为突出。 &#x1f4cc; 应用优势&#…...

基于 GoFrame 框架的电子邮件发送实践:优势、特色与经验分享

1. 引言 如果你是一位有1-2年Go开发经验的后端开发者&#xff0c;可能已经熟悉了Go语言在性能和并发上的天然优势&#xff0c;也曾在项目中遇到过邮件发送的需求——无论是用户注册时的激活邮件、系统异常时的通知&#xff0c;还是营销活动中的批量促销邮件&#xff0c;邮件功…...

ECharts 如何实现柱状图悬停时,整个背景区域均可触发点击事件

1. 前言 ECharts 柱状图的点击事件默认仅响应柱子本身的点击&#xff0c;本文旨在实现整个背景区域均可触发点击事件 2. 实现思路 核心&#xff1a;全局监听 坐标判断 数据转换 通过 getZr() 监听整个画布点击&#xff0c;结合像素坐标判断是否在图表区域内‌通过 containPi…...

金融简单介绍及金融诈骗防范

在当今社会&#xff0c;金融学如同一股无形却强大的力量&#xff0c;深刻影响着我们生活的方方面面。无论是个人的日常收支、投资理财&#xff0c;还是国家的宏观经济调控&#xff0c;都与金融学紧密相连。​ 一、金融学的概念​ 金融学&#xff0c;简单来说&#xff0c;是研…...

cursor+高德MCP:制作一份旅游攻略

高德开放平台 | 高德地图API (amap.com) 1.注册成为开发者 2.进入控制台选择应用管理----->我的应用 3.新建应用 4.点击添加Key 5.在高德开发平台找到MCP的文档 6.按照快速接入的步骤&#xff0c;进行操作 一定要按照最新版的cursor, 如果之前已经安装旧的版本卸载掉重新安…...

软件版本命名规范Semantic Versioning

​语义化版本控制&#xff08;Semantic Versioning&#xff0c;简称 SemVer&#xff09;是一种广泛采用的版本号管理规范&#xff0c;旨在通过版本号传达软件更新的性质和影响&#xff0c;帮助开发者和用户理解每次发布的变更内容 &#x1f522; 版本号结构 语义化版本号通常采…...

Uniapp: 大纲

目录 一、基础巩固1.1、Uniapp:下拉选择框ba-tree-picker1.2、Uniapp&#xff1a;确认框1.3、Uniapp&#xff1a;消息提示1.4、Uniapp&#xff1a;获取当前定位坐标 二、项目配置2.1、Uniapp&#xff1a;修改端口号2.2、Uniapp&#xff1a;本地存储 一、基础巩固 1.1、Uniapp:…...

Kubernetes控制平面组件:API Server Webhook 授权机制 详解

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

【KWDB 创作者计划】_产品技术解读_1

【KWDB 创作者计划】_产品技术解读_1 一、存储引擎:高性能混合存储架构1. 存储模型设计2. 存储压缩与编码3. 持久化策略二、KWDB 组件源码解析1. 核心模块分层架构2. 关键组件源码剖析三、KWDB 特性代码通读1. 实时分析能力(Real-Time OLAP)2. 混合负载隔离(HTAP)3. 智能索…...

Python Cookbook-6.2 定义常量

任务 你需要定义一些模块级别的变量(比如命名的常量)&#xff0c;而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py&#xff0c;并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…...

【Python爬虫】简单案例介绍2

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后&#xff0c;接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务&#xff1a;如何实现跨页爬取&#xf…...

【神经网络】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).通过缓冲机制减少系统调用&#xff0c;提高效率 (2.)围绕流进行操作&#xff0c;流用FILE *来描述(3).标准IO默认打开了三个流&#xff0c;stdin&#xff08;标准输入&#xff09;、stdout&#xff08;标…...

vue2使用ezuikit-js播放萤石视频

需求&#xff1a;需要在大屏上播放萤石视频&#xff0c;用到官方的ezuikit-js插件实现&#xff0c;并实现视频播放切换功能。有个问题至今没有解决&#xff0c;就是萤石视频的宽高是固定的&#xff0c;不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…...

什么是Lodash

一、什么是lodash 在 JavaScript 开发中&#xff0c;Lodash 是一个非常受欢迎的实用工具库&#xff0c;旨在提供高效、模块化的实用函数&#xff0c;帮助开发者更轻松地处理数组、对象、字符串等常见数据结构。它是对 JavaScript 原生方法的增强和优化&#xff0c;它在开发中提…...

【笔试强训day19】

目录 第一题&#xff1a;小易的升级之路 描述 输入描述&#xff1a; 输出描述&#xff1a; 输入&#xff1a; 输出&#xff1a; 第二题&#xff1a;礼物的最大价值 描述 输入&#xff1a; 返回值&#xff1a; 备注&#xff1a; 第三题&#xff1a;对称之美 题目描述…...

STM32电机库 电机控制特性

ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...