【Linux】使用systemd设置开机自启动命令

news2024/11/15 8:24:14

目录

  • 1 使用使用systemd实现开机自动运行命令
    • 1.1 新建一个.service文件
    • 1.2 编写.service文件
      • 1.2.1 [Unit]
      • 1.2.2 [Service]
      • 1.2.3 [Install]
    • 1.3 启动服务并设置自启动
  • 2 编写Systemd服务文件的要点
    • 2.1 Systemd服务文件的位置
    • 2.2 Systemd服务文件的格式
    • 2.3 Systemd服务文件的基本结构
      • 2.3.1 [Unit]字段的配置
      • 2.3.2 [Service]字段的配置
      • 2.3.3 [Install]字段的配置
    • 2.4 示例 .service 文件

1 使用使用systemd实现开机自动运行命令

systemd是Linux系统中现代化的初始化系统,可以使用它来实现开机自动运行命令。在systemd中,可以通过创建一个service文件,把要执行的命令放在其中,然后将其添加到systemd的自启动项中。

具体操作步骤如下:

1.1 新建一个.service文件

首先在终端中使用sudo权限创建一个.service文件,用于存储service配置:

sudo vim /etc/systemd/system/myservice.service

1.2 编写.service文件

在打开的文件中添加以下内容(此处演示的开机自启命令是需要sudo权限的),注意将其中的ExecStart替换为需要开机自启动的具体命令,ExecStart后面加上sudo。

[Unit]
Description=My Service
After=network.target

[Service]
Type=simple
ExecStart=sudo /path/to/my/command
User=root

[Install]
WantedBy=multi-user.target

在这里插入图片描述

1.2.1 [Unit]

[Unit]是systemd服务文件的一个部分,用于定义服务的基本信息。

  • Description字段包含了一个简短的描述,用于描述服务的名称,方便用户在查找时快速了解服务的作用。

  • After=network.target表示此服务会在网络服务启动后启动。

    • network.target是指网络目标单元,是Systemd中预定义的一个特殊单元,用于表示网络服务的启动状态。几乎所有的网络服务,例如DHCP、DNS解析等,在启动时都依赖于网络服务的可用性。因此,将After=network.target添加到服务的unit文件中,可以确保该服务在网络服务就绪后再启动,从而避免出现启动时的依赖性错误。

1.2.2 [Service]

[Service]是systemd服务文件中的另一个部分,用于定义服务的具体行为。

  • Type字段是服务运行时的类型,simple表示它是一个后台进程,通常用于只有一个进程的服务。
  • ExecStart字段包含了要运行的命令,多个命令可以用换行符(\n)隔开。
  • User字段指定了以哪个用户的身份运行这个服务,这里选择root用户。

1.2.3 [Install]

[Install]定义了systemd服务的安装信息。

  • WantedBy字段指定了服务将要执行的“target”(一种操作系统运行级别),这里指定的“multi-user.target”是Linux系统默认的、包含多个用户的运行级别,相当于传统的“init 3”运行级别。这意味着服务将在系统启动时自动运行。

1.3 启动服务并设置自启动

保存并退出上述.service文件,下面的命令可以启动服务并将其添加到系统自启动项中:

sudo systemctl start myservice
sudo systemctl enable myservice

执行完该命令后,可以使用systemctl命令来查看该服务的状态:

sudo systemctl status myservice.service

启动服务后,它将在系统启动时自动启动。也可以在任何时候使用以下命令停止服务并从自启动项中删除:

sudo systemctl stop myservice
sudo systemctl disable myservice

2 编写Systemd服务文件的要点

2.1 Systemd服务文件的位置

Systemd服务文件通常存放在/etc/systemd/system目录下。该目录包含了各种类型的服务文件,如系统服务、用户服务、网络等等。

2.2 Systemd服务文件的格式

Systemd服务文件通常是以.service结尾的文本文件。服务文件中的各项设置使用键值对的形式指定,每一行都是以key=value的形式组成。

2.3 Systemd服务文件的基本结构

Systemd服务文件通常包含了以下配置项:

  • [Unit]:服务的全局信息和依赖性声明,如服务名称、描述等。

  • [Service]:指定服务的具体配置,如服务执行的命令、工作目录等。

  • [Install]:指定服务的安装方式,如服务的启动级别等。

2.3.1 [Unit]字段的配置

  • Description:对服务的简短描述。

  • Before:定义服务在其他服务之前启动。

  • After:定义服务在其他服务之后启动。

  • Requires:定义服务启动需要哪些其他服务已启动,否则无法启动。

  • PartOf:定义该服务是其他服务的一部分,如果其他服务停止,该服务也会停止。

  • Wants:定义服务启动时可同时启动哪些其他服务。

  • Condition...:定义服务启动的条件,如ConditionPathExists表示某个路径存在时才启动该服务。

2.3.2 [Service]字段的配置

  • Type:服务类型,可以是simple、forking、ondemand、notify等。

  • ExecStart:服务启动命令,可以是单个命令、脚本文件、或者多个命令组成的脚本。

  • ExecStop:停止服务的命令。

  • User:定义服务运行的用户。

  • Group:定义服务运行的用户组。

  • PrivateTmp:将服务的/tmp目录挂载到私有的命名空间中,以增强安全性。

  • Restart:定义服务异常退出时如何重启。

  • WorkingDirectory:定义服务工作目录。

  • Environment:定义服务的环境变量等。

  • ProtectSystem:防止服务对系统文件进行修改。

  • NoNewPrivileges: 防止服务通过setuid或setgid等提升权限。

2.3.3 [Install]字段的配置

  • WantedBy:定义在哪些系统运行级别下启用此服务。

  • RequiredBy:启动其他系统服务时必需启动此服务。

2.4 示例 .service 文件

[Unit]
Description=MyService
After=network.target
  
[Service]
Type=simple
ExecStart=/usr/bin/myservice
WorkingDirectory=/var/myservice
User=myservice
Group=myservice
Restart=always
RestartSec=30
StartLimitInterval=400
StartLimitBurst=3
  
[Install]
WantedBy=multi-user.target

这个示例中定义了一个名为"MyService"的服务,服务启动时执行/usr/bin/myservice命令,执行工作目录为/var/myservice,运行用户为myservice。如果服务异常退出,则每30秒尝试重新启动,最多尝试3次。最后,服务将在多用户运行级别下启用。

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

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

相关文章

【基础】Kafka -- 基础架构及核心概念

Kafka -- 基础架构及核心概念 初识 KafkaKafka 基本架构Kafka 主题与分区主题与分区分区副本机制 Replica高水位 HW 生产者生产者客户端必要的参数配置消息的发送序列化分区器生产者拦截器 原理分析重要的生产者参数 消费者消费者与消费者组消费者客户端必要的参数配置订阅主题…

MySQL 按关键字进行截取

一、问题背景 取MySQL数据表中某个字段中的IP信息。 如:t_log 表中的 user_ip 字段值为 {“username”:“miracle”,“ip”:“110.230.128.186”},取出IP信息 110.230.128.186。 建表和初始化SQL语句,如下: SET NAMES utf8mb4…

GORM操作mysql数据库

对象就是程序的数据结构,关系是数据库。就是将程序的数据结构与数据库表对应起来。 在GORM是Go语言的ORM框架,将go的数据结构转化为数据库表,例如将结构体转化为数据库表。 引入gorm框架 远程下载gorm框架 go get -u gorm.io/driver/mysq…

HTTP中的Content-type详解

Content-Type Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#x…

关于java.io的学习记录(写入文本)

可以通过字节流(FileOutputStream)、字符流(OutputStreamWriter)、字符缓冲流(BufferedWriter)读取文本中的数据。 FileOutputStream写入文本 public void write(){String path "writeTest.txt"…

【是C++,不是C艹】 什么是C++ | C++从哪来 | 学习建议

💞💞欢迎来到 Claffic 的博客 💞💞 👉专栏:《是C,不是C艹》👈 前言: 我知道你急着学C,但你先别急,薛之谦认识认识C还是很有必要的。本期跟大家聊…

文件夹改名,如何在改名之后批量复制文件夹名称

在日常时候中会遇到给文件夹改名的时候,那么我们又如何在改名之后批量复制文件夹名称?今天就由小编来给大家分享一下操作办法。 首先第一步,我们要进入文件批量改名高手,并在板块栏里选择“文件夹批量改名”板块。 第二步&#xf…

SpringBoot 接入chatGPT API

SpringBoot 接入chatGPT API 一、准备工作二、补全接口示例三、申请API-KEY**四、JavaScript调用API**五、SpringBoot整合ChatGPT六、使用curl模拟请求ChatGPT平台已经为技术提供了一个入口了,作为一个Java程序员,我们第一时间想到的就是快速开发一个应用,接入ChatGPT的接口…

第十四天本地锁、Redis分布锁、Redisson锁三者的区别

一、为什么要有redis分布式锁,它解决了什么问题? 在传统单体架构的项目下,使用本地锁synchronized和lock锁就可以锁住当前进程,保证线程的安全性,但是本地锁解决不了分布式环境下多个服务资源共享的问题,而…

产品研发流程管理

先看一张图,该图适应绝大部分的产品的 研发流程 (需要的可以去下 产品研发流程| ProcessOn免费在线作图,在线流程图,在线思维导图) 该图详细描述了,不同阶段应该做什么,具体的来说,是确定了什么时候 “开会…

高精度人员定位系统源码,采用vue+spring boot框架,支持二次开发

智慧工厂人员定位系统源码,高精度人员定位系统源码,UWB定位技术 文末获取联系! 在工厂日常生产活动中,企业很难精准地掌握访客和承包商等各类人员的实际位置,且无法实时监控巡检人员的巡检路线,当厂区发生灾…

【Python】实战:生成无关联单选问卷 csv《精神状态评估表》

目录 一、适用场景 二、业务需求 三、Python 文件 (1)创建文件 (2)代码示例 四、csv 文件 一、适用场景 实战场景: 问卷全部为单选题问卷问题全部为必填问题之间无关联关系每个问题的答案分数不同根据问卷全部问…

使用pandas和seaborn绘图

使用pandas和seaborn绘图 matplotlib实际上是一种比较低级的工具。要绘制一张图表,你组装一些基本组件就行:数据展示 (即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)、图例、标题、刻度标签以及其他注解型…

【远程开发】VSCode使用Remote SSH远程连接Linux服务器

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转发自CSD…

【Unity】创建一个自己的可交互AR安卓程序

目录 1 创建一个AR场景2 配置AR Camera为前置摄像头3 配置打包场景4 下载官方提供的InteractiveFaceFilterAssets资源5 配置AR Face Manager6 创建眼镜预制件7 设置AR面部追踪8 测试效果8.1 在Unity中测试8.2 在安卓设备上测试 9 在该AR场景的基础上添加自己的想法9.1 改变眼镜…

【Java|golang】1042. 不邻接植花---邻接表着色

有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。 另外,所有花园 最多 有 3 条路径可以进入或离开. 你需要为每个花园选择一…

C++用户信息管理服务 Thrift框架 Mysql数据落地 Redis数据缓存 Kafka 消息队列 总结 附主要源码

不知不觉入职已经一个月了,近期提交了考核2,要求如下: 1、编写一个管理用户信息的服务,通过thrift的远程过程调用实现用户信息管理功能 2、用户信息至少包括 唯一ID、用户名、性别、年龄、手机号、邮箱地址、个人描述 3、提供创建…

PHP+Vue+java导师学生双选系统设计与实现springnboot+pyton

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的管理员功能如下。管理员管理学员,导师,管理项目信息,管理项目提交,管理指导项目信息。运行环境:phpstudy/wamp/xammp等 卓越导师双选系统根据调研&…

GCC 常用命令

GCC 编译过程 一个 C/C文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking) 等 4 步才能变成可执行文件 (1) 预处理 C/C源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、…

系统集成项目管理工程师案例分析考点汇总(沟通/干系人、风险、合同等)

沟通及干系人管理常见考点1. 沟通管理计划的内容2. 项目绩效报告的主要内容3. 沟通中容易出现的问题4. 如何采取有效措施改进沟通5. 如何召开有效的会议 合同管理常见考点1. 合同签订时应注意的内容及条款2. 合同管理常见的问题3. 合同管理问题的应对措施 采购管理常见考点1. 采…