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

Ubuntu 20.04 设置开机自启脚本

ubuntu16.04 以后的版本不再使用initd管理系统,因此再支持 update-rc.d 方式添加开机自启脚本。

Ubuntu18 版本开始,使用了systemd 替代了 initd 管理系统,并且默认已经取消了 /etc/rc.local 文件。只能使用 systemctrl 命令进行添加。

systemd 默认读取 /etc/systemd/system下的配置文件,该目录下的文件会链接 (软链接)/lib/systemd/system/ 下的文件。一般系统安装完 /lib/systemd/system/ 下会有  rc-local.service  文件,即我们需要的配置文件。

下面介绍三种添加开机自启脚本的方法,所测试的系统为 Ubuntu 20.04

使用 rc-local.service

rc-local.service 是系统自带的一个开机自启服务,但是在 ubuntu 20.04 上,该服务默认没有开启。

1、建立开机启动服务

1 修改 rc-local.service 文件 

rc-local.service  文件 路径 /lib/systemd/system/rc-local.service

sudo vim /lib/systemd/system/rc-local.service

在文件的最后面添加 [Install] 段的内容,可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段:

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
 
#这一段原文件没有,需要自己添加
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

rc-local.service 内容解释

[Unit]  # 区块:启动顺序与依赖关系
Description  # 服务的描述
Documentation
ConditionFileIsExecutable # 指定了执行的文件, 表示服务要启动的程序(或脚本)
After=network.target  # 表示该服务的依赖关系,表示在 network.target 这个 target 后面进行执行。也就是网络启动完成之后,执行 /etc/rc.local 文件。

[Service] # 区块:启动行为,如何启动,启动类型。
Type=forking # 后台运行的形式
ExecStart=/etc/rc.local start  # 启动服务的命令(命令必须写绝对路径)
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

#这一段原文件没有,需要自己添加
[Install]  # 区块,定义如何安装这个配置文件,即怎样做到开机启动
WantedBy=multi-user.target # multi-user.target 表示多用户命令行状态
Alias=rc-local.service # 指的是表示该服务所属 target


上述命令只写了启动的,重启、停止等可以根据自己情况添加。
注意:启动、重启、停止命令全部要求使用绝对路径
ExecReload              为服务的重启命令
ExecStop                为服务的停止命令
PrivateTmp=True         表示给服务分配独立的临时空间

2. 创建 /etc/rc.local

Ubuntu 20.04 默认不存在 /etc/rc.local,需要自己创建 touch /etc/rc.local

在该文件中添加脚本内容,即开机脚本需要实现的功能,这里只是简单地实现了向某一个文件里填充数据功能。

#!/bin/bash

# 将你需要执行的命令写在这里,禁止写入死循环命令
echo "开机启动测试" > /home/test.log

exit 0

3. 修改 /etc/rc.local 权限

脚本要想运行,还需要设置脚本的可执行权限,使用 sudo chmod 777 /etc/rc.local 或 sudo chmod +x /etc/rc.local 修改该文件的权限。

4. 启动 rc-local.service

systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接

输入以下命名,使能 rc-local 服务。

sudo systemctl enable rc-local.service 
# 或者
sudo systemctl enable rc-local

# 以上两个命令其实是一个软链接命令
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

实际上就是在 /etc/systemd/system/ 目录下创建了一个软链接。

即  /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/rc-local.service
系统在开机后会自动去 /etc/systemd/system/ 目录下读取需要启动的服务配置

4. 启动 rc-local.service

输入 sudo systemctl enable rc-local.servicesudo systemctl enable rc-local 使能 rc-local 服务,实际上就是在 /etc/systemd/system/ 目录下创建了一个软链接。

5. 检查服务状态

使用 sudo systemctl status rc-local.service 查看 rc-local 服务的状态, 显示 loaded 和 enabled。

6. 重启验证

Ubuntu 20.04 设置开机自启脚本_小辉_Super的博客-CSDN博客_ubuntu20开机自启动脚本

Linux实现脚本开机自启动 - 白菜没我白 - 博客园

Ubuntu 18 使用 rc.local执行开机启动脚本【转】 - 走看看

Ubuntu 18.04 LTS 配置 rc.local 开机自动启动脚本-老唐笔记

Ubuntu20.04 设置开机自启shell脚本_道阻且长行则将至!的博客-CSDN博客_ubuntu 设置sh自启动

Ubuntu 20.04 开机执行自定义脚本 - 走看看

相关文章:

  • Vue2封装评论组件详细讲解
  • java-php-python-springboot校园新闻趣事计算机毕业设计
  • 使用Docker Compose搭建WordPress博客
  • 【Linux篇】第十一篇——动静态库(动静态库的介绍+动静态库的打包与使用)
  • 多任务学习(MTL)--学习笔记
  • 前端性能优化方法与实战01 体系总览:性能优化体系及关键指标设定
  • 小米面试——C++开发岗位
  • 【训练方法】OHEM
  • java毕业设计汽车出租平台源码+lw文档+mybatis+系统+mysql数据库+调试
  • C#教程 - 其他(Other)
  • Java项目:JSP会议-会议室管理系统
  • 计算空间物体包围球的两种算法实现
  • Unity 导航寻路快速上手
  • Advanced Git
  • Selenium基础 — Selenium自动化测试框架介绍
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 07.Android之多媒体问题
  • gcc介绍及安装
  • Java基本数据类型之Number
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • zookeeper系列(七)实战分布式命名服务
  • 搭建gitbook 和 访问权限认证
  • 番外篇1:在Windows环境下安装JDK
  • 如何编写一个可升级的智能合约
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 算法之不定期更新(一)(2018-04-12)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (8)STL算法之替换
  • (day 12)JavaScript学习笔记(数组3)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (九十四)函数和二维数组
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Google的Objective-C编码规范
  • (转载)Linux网络编程入门
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET 表达式计算:Expression Evaluator
  • .Net6使用WebSocket与前端进行通信
  • .NET连接MongoDB数据库实例教程
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net小白的大学四年,内含面经
  • @Pointcut 使用
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [autojs]autojs开关按钮的简单使用
  • [BUUCTF 2018]Online Tool(特详解)
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [echarts] y轴不显示0