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

news/2024/5/17 6:16:57/文章来源:https://blog.csdn.net/qq_41084756/article/details/130200523

目录

  • 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.luyixian.cn/news_show_289557.aspx

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

相关文章

Spring事务(3)-TransactionInterceptor实际事务执行

Spring事务(2)-EnableTransactionManagement实现源码解析 中介绍了Spring事务开启和代理的实现,现在了解实际事务执行TransactionInterceptor。 TransactionInterceptor TransactionInterceptor类图 MethodInterceptor:AOP代理后…

IDEA社区版搭建Tomcat服务器并创建web项目

IDEA社区版搭建Tomcat服务器并创建web项目 目标 创建Web项目的目录结构可以启动Tomcat服务器编写Servlet并访问成功 问题 IDEA社区版没有创建Web工程的选项IDEA社区版没有Tomcat插件 实现步骤 针对以上两个问题,分步解决 问题一:IDEA社区版没有创建…

深入认识VirtualPrivateNetwork

目录 一、认识什么是认证? 1.什么是数据认证,有什么作用,有哪些实现的技术手段? 2.什么是身份认证,有什么作用,有哪些实现的技术手段? 二、认识什么是VPN 1.什么VPN技术? 2.VPN技术有哪些分类? 3.IPSEC技术…

我的Qt作品(18)模仿Qt Creator IDE写了一个轻量级的视觉框架

Qt Creator的源码比较庞大。前几年我陆陆续续读过里面的源码。也写了几篇博文: https://blog.csdn.net/libaineu2004/article/details/104728857 https://blog.csdn.net/libaineu2004/article/details/89407333 最近一直想找机会,借用这个IDE的皮&…

mapreduce基础: 手写wordcount案例

文章目录 一、源代码二、运行截图 一、源代码 WordCountMapper类 package org.example.wordcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;impo…

DNS服务器配置与使用【CentOS】

从本质上说,DNS是一个分布数据库,是一个树形结构(不是网状)——层次结构 DNS查找过程就是 回溯的过程(递归、迭代) www.xxx.edu.cn(属于四层结构) 查询DNS:域名到IP地址的…

【Maven 入门】第二章、Maven核心程序解压与配置

一、Maven 官网地址 首页: Maven – Welcome to Apache Maven(opens new window) 下载页面: Maven – Download Apache Maven(opens new window) 本文以maven-3.3.8为例 具体下载地址:https://dlcdn.apache.org/maven/maven-3/3.8.8/bina…

Linux学习记录—— 이십일 进程间通信(3)信号量和消息队列

文章目录 1、消息队列2、信号量1、了解概念2、信号量理解 3、接口4、理解IPC 1、消息队列 两个进程ab之间系统维护一个队列结构,a进程往队列里放信息,信息编号为1,b进程往队列里放信息,信息编号为2;之后开始读取数据的…

OrCAD原理图检查

OrCAD原理图检查 FPGA或处理器芯片原理图封装检查OrCad元件Part Reference与Reference位号不同检查所有器件是否与CIS库元件匹配用CIS库中的元器件替换已存在器件方法1方法2 DRC检查修改页码Annotate重排位号利用Intersheet References功能进行off-page索引检查封装、厂家、型号…

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~😎 前言🙌堆的应用 —— 堆排序算法:堆排序算法源代码分享运行结果测试截图: 总结撒花💞 😎博客昵称:博客小梦 &#x1f60…

安装配置 JupyterLab ubuntu20.04

目录 ​编辑 (1)安装 (2)配置 (1)生成配置文件 (2)生成jupyterlab的登录密码 (3)修改 jupyter 的配置文件 (4)安装 jupyterlab…

leetcode每日一题——美团笔试题【1】

今天分享两道算法题,自己刚开始练习,可能在解法上不是最佳的,但是只提供一些自己的思路,欢迎大家多多指教~ 第一题 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1:输入: s "lee…

算法的时间复杂度和空间复杂度(2)

计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); } 因为递归先递推后回归&#xff0c;看起来规律像等比数列&#xff0c;也可以用错位相减法&#xff0c;因为斐波那契数列到第二项就不会再计算了&a…

【Spring Boot】SpringBoot设计了哪些可拓展的机制?

文章目录 前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点 前言 当我们引入注册中心的依赖&#xff0c;比如nacos的时候&#xff0c;当我们启动springboot&#xff0c;这个服务就会根据配置…

2023/4/20总结

项目 网上关于listview的资料太少了&#xff0c;在网上的那些资料里面&#xff0c;了解到以下这些。 如果希望listview后期能更改或者更新&#xff0c;那么需要使用到 ObservableList 它可以观察到&#xff0c;listview的改动。 需要特别注意一点的是&#xff1a;写俩者的…

第 三 章 UML 类图

文章目录 前言一、依赖关系&#xff08;虚线箭头&#xff09;二、泛化关系&#xff1a;继承&#xff08;实线空心箭头&#xff09;三、实现关系&#xff08;虚线空心箭头&#xff09;四、关联关系&#xff08;一对一为实线箭头&#xff0c;一对多为实线&#xff09;五、聚合关系…

java贸易企业工作信息管理与利润返现系统sxA5进销存程序

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 研究现状 1 本章小结 1 第2章 可行性分析 2 2.1 经济可行性 2 2.2 技术可行性 2 2.3 操作可行性 2 2.4 业务流程分析 3 本章小结 3 第3章 需求分析 4 3.1 需求分析 4 …

Nuxt.js - 超详细实现路由 “伪静态“,将浏览器网页路径 URL 链接后面加上 .html 后缀名称(可以自定义任何结尾后缀名称)详细示例教程

前言 正常的项目,路由都是 /index | /user/add 这种,但有一个办法可以让其后面带上 .html,比如:/index.html。 本文 在 Nuxt.js 项目中,描述了如何实现伪静态详细教程,让页面路由后面都跟上一段自定义后缀名,比如 .html / .asp, 你可以按照本文的教程,最终得到伪静态…

react中如何系统化的处理时间操作?

在 Web 开发中&#xff0c;我们经常需要处理日期和时间的格式化。 在 React 中&#xff0c;这个过程变得更加容易和直观&#xff0c;因为我们可以使用一个叫做 moment 的 npm 包来帮助我们完成这个任务。 什么是 Moment? Moment.js是一个JavaScript库&#xff0c;用于处理日…

Vue2组件通信专题

组件通信专题 一、vue2中常用的6中组件通信方式 1. props 适用于的场景&#xff1a;父子组件通信 注意事项&#xff1a; 如果父组件给子组件传递数据&#xff08;函数&#xff09;&#xff1a;本质其实是子组件给父组件传递数据。 如果父组件给子组件传递数据&#xff08…