Linux系统开机自启动脚本(案例:Raspberry Pi 4B脚本)

前言:本篇博客为手把手教学的 Linux 系统开机自启动脚本教程,且额外包含有 Raspberry Pi 4B 的开机自启动案例。日常工程项目中往往需要 Linux 系统能够自启动一些代码程序,本篇博客利用虚拟机下的 Ubuntu 自启动脚本来进行教学,且额外提供了 Raspberry Pi 4B 的案例操作。望这篇博文能给读者朋友遇到的各种 Linux 系统自启动工程带来些许帮助,Respect!

Ubuntu自启动:

Raspberry Pi 4B自启动:

一、Linux系统自启动概述

在 Linux 操作系统中,自启动是指在系统启动过程中自动运行程序或服务的过程。这通常是通过一些特定的机制实现的,这些机制会随着不同的 Linux 发行版和系统初始化系统的不同而有所差异。

Linux 系统自启动的意义体现在以下几个方面: 

1、自动化和效率: 自启动允许系统在启动时自动运行关键服务和应用程序,无需人工干预。 这提高了系统的自动化水平,节省了管理员的时间,并确保了服务的高可用性。

2、系统稳定性: 对于生产环境和服务型系统,关键服务需要从系统启动时刻就开始运行,以保证系统的稳定性和服务的连续性。

3、服务管理: 自启动服务可以被系统服务管理器(如systemd或init)管理,这样可以方便地控制服务的启动、停止、重启和状态查询。

4、资源管理: 通过自启动,系统可以在启动时根据需要分配资源,如网络接口、文件系统挂载等。

5、安全性: 自启动脚本和服务可以在系统启动时执行安全相关的任务,如更新防火墙规则、启动加密服务、检查系统文件完整性等。

6、定制化: 系统管理员可以根据组织的需要定制自启动程序,以适应特定的业务需求和工作流程。

7、维护和支持: 对于需要24/7运行的系统,如服务器和云基础设施,自启动是确保系统持续运行和易于维护的关键。

8、用户体验: 对于桌面用户,自启动可以确保在登录后立即获得所需的环境和应用程序,如即时通讯客户端、邮件客户端等。

9、系统恢复: 在系统崩溃或意外关机后重启时,自启动脚本可以帮助系统恢复到正常状态,执行数据同步、校验和修复等操作。

10、开发和支持: 对于开发人员,自启动脚本可以用来启动开发环境、数据库服务和后台服务,以便于快速开始工作。

二、Linux系统自启动方案

在 Linux 系统中,可以通过多种方式设置自启动脚本,以确保在系统启动时自动运行特定的脚本或程序。以下是几种常见的设置自启动脚本的方法:

2.1 rc.local方案

/etc/rc.d/rc.local 文件会在 Linux 系统各项服务都启动完毕之后再被运行。所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到该文件里。 但是,首先需要确认你有运行这个文件的权限。

$ chmod +x /etc/rc.d/rc.local

我们创建了一个脚本,当它被执行之后,将在家目录下写入有特定信息的文件。

vim auto_run_script.sh

#!/bin/bashdate >> /home/ok/output.txthostname >> /home/ok/output.txt

保存退出后,再给它赋予可执行权限:

chmod +x auto_run_script.sh

我们再将脚本添加到 /etc/rc.d/rc.local 文件最后一行:

vim /etc/rc.d/rc.local

/home/ok/auto_run_script.sh

接下来,我们就可以试试效果了。直接重启系统就可以了:

sudo reboot

重启之后,就会在用户目录下看到脚本执行的结果了。

2.2 systemd方案

 1、创建服务单元文件

~/.config/systemd/user/ 目录下创建一个以 .service 为后缀的服务单元文件,例如 myprogram.service
~/.config/systemd/user//etc/systemd/system/ 是两个不同的目录,用于存放 Systemd 服务的配置文件,但它们在作用范围和用途上有所不同。

1. ~/.config/systemd/user/ 目录:

  • 这是针对单个用户的 Systemd 服务配置目录,每个用户都可以在自己的家目录下使用这个目录。
  • 该目录中的服务配置只对当前用户可见,不会影响其他用户的服务配置。
  • 用户可以在这里定义自己的 Systemd 服务,并且这些服务只在该用户登录时运行,当用户注销或关机时,对应的服务也会停止。

2. /etc/systemd/system/ 目录:

  • 这是系统范围的 Systemd 服务配置目录,用于存放全局的服务配置文件。
  • 该目录中的服务配置对系统上的所有用户都可见,因为它们是在整个系统启动时加载的。
  • 系统管理员通常会在这里定义系统范围的服务,这些服务将在系统启动时自动运行,并且在整个系统运行期间持续工作,无论是否有用户登录。

总结:

  • ~/.config/systemd/user/ 用于用户级别的 Systemd 服务配置,只对当前用户生效,服务在用户登录时运行。
  • /etc/systemd/system/ 用于系统级别的 Systemd 服务配置,对整个系统的所有用户生效,服务在系统启动时运行。

2、配置服务单元文件
在服务单元文件中,定义程序的启动配置。例如:

[Unit]
Description=My Program[Service]
ExecStart=/path/to/myprogram[Install]
WantedBy=default.target

请将 /path/to/myprogram 替换为实际的应用程序的完整路径(myprogram 是二进制应用程序)。

3、重新加载 systemd 用户配置
使用以下命令重新加载 systemd 用户配置,使其生效:

systemctl --user daemon-reload

4、启用并启动服务
启用服务,使其在用户登录时自动运行:

systemctl --user enable myprogram

启动服务:

systemctl --user start myprogram

现在,每次用户登录时,程序将自动运行。 

2.3 init.d脚本方案

1、创建脚本文件

首先,创建一个脚本文件,比如命名为 autostart.sh,并将需要在开机时自动运行的命令或程序添加到脚本中。例如,假设我们要在系统启动时自动运行一个名为 myprogram 的应用程序,可以将以下内容添加到脚本中:

#!/bin/bash
/path/to/myprogram

请将 /path/to/myprogram 替换为实际的应用程序路径。

2、赋予脚本文件执行权限

保存脚本文件后,确保脚本文件具有可执行权限,以便系统可以执行它。使用以下命令为脚本文件添加执行权限: 

chmod +x autostart.sh

3、将脚本文件移动到 /init.d 目录下
将脚本文件移动到 /etc/init.d/ 目录中,这样系统将在启动时自动查找该目录下的脚本文件。使用以下命令将脚本文件移动到目标目录: 

sudo mv autostart.sh /etc/init.d/

4、添加脚本到启动项
使用 sudo update-rc.d 命令将脚本添加到启动项中,以便在系统启动时自动运行。例如,执行以下命令将脚本文件添加到启动项:

sudo update-rc.d autostart.sh defaults

三、虚拟机Ubuntu自启动脚本

本文针对的是 Ubuntu 18.04 系统的设置操作

Ubuntu16 版本后系统取消 rc.local 的设置,并把这个设置的权限交给了 systemd 来处理,但很多朋友发现 systemd 非常不好用,那我们要怎么操作来完成开机自启命令的添加呢?

其实 Ubuntu 18.04 取消了 rc.local 的设置,但并没有真正的删除这项的配置,我们可以自己恢复 rc.local 来重新设置开机自启命令。

1、 检查系统中 rc-local.service

运行 ls /lib/systemd/system | grep rc 你可以看到有很多启动脚本,其中就有我们需要的 rc-local.service

2、修改 rc-local.service

打开 rc-local.service 脚本内容,内容如下:

一般正常的启动文件主要分成三部分

[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段:

[Install]
WantedBy=multi-user.target  
Alias=rc-local.service

PS:添加了[Install]内容后,下面两行的 WantedBy 和 Alias 两个英文跟上面的都是绿色的,要是绿色才有用。

一般需要先修改 rc-local.service 的权限才可以进行编辑。

sudo chmod 777 /lib/systemd/system/rc-local.service

 按照自己的需求编写一个需要运行的代码,作者的如下:

简单的终端打印 “hello world\r\n”

3、新建并修改 rc.local 文件

查看系统中有无 /etc/rc.local 这个文件,没有则自己创建一个。 然后把你需要启动脚本写入 /etc/rc.local ,我们不妨写一些测试的脚本放在里面,以便验证脚本是否生效。

sudo vim /etc/rc.local

 /etc/rc.local 中的内容如下,脚本执行 /home/senak/auto/hello

4、给 rc.local 加上权限;

sudo chmod 777 /etc/rc.local

5、建立软连接

 ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/ 

6、使能 rc-local 的功能;

systemctl start rc-local
systemctl enable rc-local

7、Linux 系统自启动脚本结果;

如果在 /etc/rc.local 中添加的是 ./test.sh 这种类型的,要在末尾加上 &,不然重启 ubuntu 的时候会卡在启动界面进不去系统(如下图所示,作者就是卡在虚拟机的启动界面了,但是按 ESC 可以看出终端确实在持续打印目标文件)。

四、树莓派4B自启动脚本案例

4.1 Espeak的脚本安装

作者使用一个例子程序,其功能是在树莓派启动时播报「Welcome to the world of Raspberry Pi」。该程序使用 Espeak 库实现,因此需要安装依赖项。

sudo apt-get install espeak

进入 /home/pi 目录运行下面的命令创建 sample.py 文件。

sudo nano sample.py

  贴入下面的代码并保存(CTRL+X 后键入 Y 回车)。

#! /usr/bin/env python
from subprocess import call
call(['espeak "Welcome to the world of Raspberry Pi" 2>/dev/null'], shell=True)

4.2 rc.local自启动

1、编辑 /etc/rc.local 文件,需要使用 root 权限才能写入。

sudo chmod 777 /etc/rc.local
sudo vi /etc/rc.local

2、配置好之后每当树莓派启动时,都会在其他服务启动前先运行这行命令。也正因为如此,当你的程序依赖某个服务时(如网络),需要等待这些服务正常启动之后才不会出错。

如果你希望记录程序的运行结果,还可以添加程序的输出,例如:

sudo python /home/pi/sample.py & > /home/pi/Desktop/log.txt 2>&1

3、Raspberry Pi 4B 系统自启动脚本结果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣240.搜索二维矩阵II

力扣240.搜索二维矩阵II 因为原数组是从上到下从左到右增加的 在左下(和右上角)时有特性&#xff1a;i减小则a[i]减小&#xff0c;j增大则a[j]增大因此从左下角开始遍历 找到结果return即可 class Solution {public:bool searchMatrix(vector<vector<int>>&…

vue canvas学习

说明 在vue里试用一下canvas&#xff0c;记录一下 代码 <template><div><canvas ref"canvas1" height"500" width"500"></canvas><button click"draw">画图</button></div> </templa…

深入解析Transformer:大模型核心技术揭秘

在大模型发展历程中&#xff0c;有两个比较重要点&#xff1a;第一&#xff0c;Transformer 架构。它是模型的底座&#xff0c;但 Transformer 不等于大模型&#xff0c;但大模型的架构可以基于 Transformer&#xff1b;第二&#xff0c;GPT。严格意义上讲&#xff0c;GPT 可能…

【网络安全的神秘世界】docker启动失败?看我如何成功启动

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 &#x1f64b;‍♂️问题描述 关闭docker后再启动就发现启动失败了 错误信息&#xff1a;Job for docker.service failed b…

2020C++等级考试二级真题题解

202012数组指定部分逆序重放c #include <iostream> using namespace std; int main() {int a[110];int n, k;cin >> n >> k;for (int i 0; i < n; i) {cin >> a[i];}for (int i 0; i < k / 2; i) {swap(a[i], a[k - 1 - i]);}for (int i 0…

Unity定时(延迟)管理器实现

前言 Unity中实现定时功能的方法有很多&#xff0c;比如协程、Update、Invoke、Async等&#xff0c;可以说是五花八门&#xff0c;对于这类实现方法多、需求频繁的功能还是需要一个管理器来统一处理。 功能 下面列出了该管理器支持的功能&#xff0c;可以根据根据所列功能判…

tron-passwd写入提权

troneasy敏感信息收集、Brainfuck解密、替换密码、ssh利用、passwd提权机发现 **后续需要虚拟机的私信我&#xff0c;我会打包进行文章发布链接&#xff0c;请持续关注&#xff01;&#xff01;&#xff01;** 主机发现 netdiscover -i eth0 -r 192.168.44.0/24端口服务 nm…

注解详解系列 - @Profile:基于环境的配置切换

注解简介 在今天的注解详解系列中&#xff0c;我们将探讨Profile注解。Profile是Spring框架中的一个重要注解&#xff0c;用于根据不同的环境配置有选择性地启用或禁用特定的bean。通过Profile注解&#xff0c;可以方便地在开发、测试、生产等不同环境中切换配置。 注解定义 …

速盾:cdn加速什么好?

CDN加速是一种通过使用内容分发网络&#xff08;Content Delivery Network&#xff09;来提高网站速度的技术。在了解CDN加速的好处之前&#xff0c;首先需要明白什么是CDN。CDN是一种分布在全球不同地理位置的服务器网络&#xff0c;用于存储和交付网站的静态和动态内容。当用…

AI语言文字工具类API实现自动化的写作

热门实用的AI语言文字工具类API是当今开发者们追逐的宝藏。这些API利用先进的人工智能和自然语言处理技术&#xff0c;为开发者提供了一系列实用而强大的语言文字处理能力。这些API包括了文本翻译、情感分析、智能写作、关键词提取、语言检测等功能&#xff0c;使得开发者能够轻…

timescaledb:创建real-time aggregate

创建hypertable【chz_a】 create table chz_a (time timestamp,device_id int8, value double precision,primary key (time) ); SELECT create_hypertable(chz_a, by_range(time) );往表里面写入数据 # 当天的数据 insert into chz_a (time, device_id, value) values (now(…

【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)

目录 资源链接 一、网站选择 二、数据爬取要求 三、数据清洗要求 四、实现代码 1.数据采集 2.数据清洗 资源链接 下面有笔者所放的源码下载链接&#xff0c;读者可自行下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg 提取码&…

Python酷库之旅-第三方库openpyxl(03)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

DDA直线算法

理论部分 假设给定直线段的起点坐标 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)和终点坐标 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​),则该直线的直线方程为: y = k x + b y=kx + b y=kx+b 其中 k = y 1 − y 2 x 2 − x 1 , b = y 0 − k x 0 k=\frac{y_1-y_2}{x_2-x_1},b=y_0-kx_0 k…

tdlib自定义Telegram客户端电报客户端

之前做过多个电报机器人 最近闲来无事,顺手了解了下tdlib,打算使用dart做一个pc和移动端的tg客户端,顺便解决官方无法下载某些视频图片文件的问题. 前期踩了不少坑,花了3天时间完成了pc端的基本功能 效果展示

P5714 【深基3.例7】肥胖问题

1. 题目链接 https://www.luogu.com.cn/problem/P5714 P5714 【深基3.例7】肥胖问题 2. 题目描述 题目描述&#xff1a;BMI计算:m / (h * h)&#xff0c;m是体重(kg)&#xff0c;h是身高(m) 小于18.5&#xff1a;体重国轻&#xff0c;Underweight 小于等于18.5且小于24&#…

电脑文件夹怎么加密?文件夹加密的5种方法

在数字化时代&#xff0c;信息安全显得尤为重要。对于个人电脑用户来说&#xff0c;文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法&#xff0c;帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一&#xff1a;利用Windows系统自带的…

shardingsphere调优日记

文章目录 一、总括二、连接数调优二、CPU线程的利用率三、服务器内存的利用率 一、总括 调优的几个方面 连接数调优&#xff0c;包含shardingsphere和mysql的连接数。shardingsphere的globle.yaml中线程调优。&#xff08;充分利用CPU&#xff09;shardingsphere中的内存调优…

节能减排如何替电子行业巨头降低成本

尖端科技与环境之间的矛盾&#xff0c;已经不再是科幻小说家笔下的虚构。 先进芯片制造从熔化硅开始&#xff0c;到使用大功率激光进行光刻&#xff0c;再到创造和维护真空状态&#xff0c;以及持续清洁工作&#xff0c;每一个环节都需要大量的电力支持。据统计&#xff0c;半…

体验一下 Claude 3.5 Sonnet

体验一下 Claude 3.5 Sonnet 0. 引言1. Artifacts - 使用 Claude 的新方式2. 体验一下 Claude 3.5 Sonnet 0. 引言 2024年6月21日&#xff0c;Anthropic 推出 Claude 3.5 Sonnet&#xff0c;这是即将推出的 Claude 3.5 型号系列中的第一个版本。 Claude 3.5 Sonnet 提高了行业…