Ubuntu开机自启服务systemd.service配置教程(Ubuntu服务)(Linux服务)upstart

news2024/9/20 16:37:56

文章目录

    • 为什么要将程序配置成服务?
      • 1. 自动启动
      • 2. 后台运行
      • 3. 定时重启
      • 4. 简化管理
      • 5. 整合系统
    • 版本支持
      • 1. Ubuntu 14.04及更早版本:使用`upstart`作为默认的init系统
        • /etc/rc.local
          • 旧版本
          • 新版本
      • 2. Ubuntu 15.04到16.04版本:默认使用`systemd`作为init系统,但仍然兼容`upstart`
      • 3. Ubuntu 16.10及更高版本:默认使用`systemd`作为init系统
      • 总结
    • 开机自启服务原理
    • 配置步骤
      • 1. 创建配置文件
      • 2. 编辑配置文件
      • 3. 拷贝配置文件
      • 4. 启用服务
      • 5. 启动服务
      • 6. 停止服务
      • 7. 禁用服务
    • 配置项解释
      • 配置父项
      • 配置子项
        • `[Unit]`配置子项
          • - `Description`:用于设置服务的描述信息。
          • - `Requires`:用于指定服务所依赖的其他服务。
          • - `After`:用于指定服务启动的顺序,可以设置在哪些服务之后启动。
          • - `Before`:用于指定服务启动的顺序,可以设置在哪些服务之前启动。
        • `[Service]`配置子项
          • - `ExecStart`:用于指定服务的启动命令。
          • - `WorkingDirectory`:用于指定服务的工作目录。
          • - `Environment`:用于设置服务的环境变量。
          • - `User`:用于指定服务运行的用户。
          • - `Group`:用于指定服务运行的用户组。
        • `[Install]`配置子项
          • - `WantedBy`:用于指定服务在哪些目标(target)下启动。
          • - `RequiredBy`:用于指定哪些目标(target)依赖于该服务。
    • systemd官方文档(systemd.service完整配置选项)
    • systemd支持在/etc/systemd/system创建子目录,便于我们方便管理我们的.service文件
    • vscode相关插件:Systemd Helper
    • 使用软链接链接systemd配置文件

为什么要将程序配置成服务?

我们在linux系统下启动一个程序,一般用一条命令,或者执行一个脚本就行了,那么,为什么还要将程序配置成服务?这样做有什么好处?

1. 自动启动

配置成服务后,程序将在系统启动时自动启动,无需手动操作。这样可以确保程序在系统重启后能够自动运行,避免因为人为疏忽或其他原因导致程序未能启动。

2. 后台运行

配置成服务后,程序将以后台进程的方式运行,不会占用终端或用户会话。这样可以确保程序在后台持续运行,即使用户注销或关闭终端。

3. 定时重启

通过配置服务,可以设置服务在异常退出时自动重启。这样可以提高程序的稳定性,确保在出现问题时能够及时恢复运行。

4. 简化管理

配置成服务后,可以使用系统工具(如systemctl)来管理服务,如启动、停止、重启、查看状态等。这样可以方便地管理和监控程序的运行状态。

5. 整合系统

配置成服务后,程序可以与系统的其他服务和组件进行整合。例如,可以设置服务的依赖关系,确保在其他服务启动之前先启动该服务;还可以将服务与日志记录、监控系统等集成,方便管理和故障排查。

版本支持

在不同的Ubuntu版本中,配置开机自启服务的方式可能会有所不同。以下是几个常见的Ubuntu版本和它们支持的开机自启服务类型。本文主要讲解Ubuntu 16.10及更高版本,使用systemd作为init系统的服务开机自启方式。

1. Ubuntu 14.04及更早版本:使用upstart作为默认的init系统

可以创建一个.conf文件来配置开机自启服务,然后将它放在/etc/init/目录下。

/etc/rc.local

旧版本

rc.local是一种在Ubuntu中配置开机自启服务的方式,它属于早期版本的init系统。具体来说,rc.local是在Ubuntu 14.04及更早版本中使用的方式,使用的是upstart作为默认的init系统。

rc.local是一个脚本文件,位于/etc/rc.local。你可以在该文件中添加要在系统启动时执行的命令或脚本。这些命令或脚本将在系统启动时自动执行。

以下是使用rc.local配置开机自启服务的步骤:

  1. 打开rc.local文件:

    sudo nano /etc/rc.local
    
  2. 在文件中添加你要执行的命令或脚本。例如,如果要启动一个名为my_service的服务,可以添加以下内容:

    /path/to/your/service
    

    注意,命令或脚本必须是可执行的。

  3. 保存并关闭文件。

  4. 确保rc.local文件具有可执行权限:

    sudo chmod +x /etc/rc.local
    
  5. 重启系统,服务将在系统启动时自动执行。

需要注意的是,rc.local方式在较新的Ubuntu版本中已经不再推荐使用,因为它是基于旧的upstart系统。对于使用systemd作为init系统的较新版本的Ubuntu,建议使用systemd的方式来配置开机自启服务。

新版本

在一些较新的Ubuntu版本中,如Ubuntu 16.04及更高版本,rc.local文件默认是被禁用的,因为这些版本使用systemd作为默认的init系统。systemd不会自动执行rc.local文件中的内容。

为了在这些版本中使用rc.local文件,可以通过配置rc-local.service来实现。rc-local.service是一个systemd服务单元,用于在系统启动时执行rc.local文件中的内容。

以下是配置rc-local.service的步骤:

  1. 创建rc-local.service文件:

    sudo nano /etc/systemd/system/rc-local.service
    
  2. 在文件中添加以下内容:

    [Unit]
    Description=/etc/rc.local Compatibility
    ConditionPathExists=/etc/rc.local
    
    [Service]
    ExecStart=/etc/rc.local start
    Type=forking
    TimeoutSec=0
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    
  3. 创建rc.local文件:

    sudo nano /etc/rc.local
    
  4. rc.local文件中添加要执行的命令或脚本。

  5. 保存并关闭文件。

  6. 设置rc.local文件的权限:

    sudo chmod +x /etc/rc.local
    
  7. 启用rc-local.service

    sudo systemctl enable rc-local.service
    
  8. 启动rc-local.service

    sudo systemctl start rc-local.service
    

rc.local文件中的内容将在系统启动时自动执行。

对于较新的Ubuntu版本,使用rc.localrc-local.service的方式可能不是最佳实践。推荐使用systemd的方式来配置开机自启服务,以便与当前的init系统保持一致。

2. Ubuntu 15.04到16.04版本:默认使用systemd作为init系统,但仍然兼容upstart

可以使用upstart的方式来配置开机自启服务,或者使用systemd的方式。

3. Ubuntu 16.10及更高版本:默认使用systemd作为init系统

可以使用systemd的方式来配置开机自启服务。

总结

systemd是目前主流的init系统,大多数Ubuntu版本都支持使用systemd来配置开机自启服务。但是,对于旧版本的Ubuntu,可能需要使用upstart来配置开机自启服务。

开机自启服务原理

以使用systemd作为系统初始化的管理器为例。systemd是一个Linux系统和服务管理器,它负责启动、停止和管理系统中的各种服务。

当系统启动时,systemd会读取/etc/systemd/system/目录下的服务配置文件,并根据配置文件中的指令来启动相应的服务。配置文件中的ExecStart字段指定了要执行的命令或脚本,WorkingDirectory字段指定了命令或脚本的工作目录。

通过使用systemctl enable命令,我们告诉systemd将该服务配置文件链接到系统的默认目标(default target),使得该服务在系统启动时自动启动。

当系统启动时,systemd会按照配置文件中的指令来启动服务。如果服务成功启动,systemd会将服务的状态标记为"active"。如果服务启动失败,systemd会将服务的状态标记为"failed"。

通过使用systemctl start命令,我们可以手动启动服务。而使用systemctl stop命令可以停止服务。

通过使用systemctl disable命令,我们可以禁用服务,使得该服务在系统启动时不会自动启动。

总结:使用systemd来管理服务的启动和停止,通过配置服务配置文件并将其链接到系统的默认目标,使得服务在系统启动时自动启动。

配置步骤

systemd作为init系统的服务开机自启方式为例。下面是配置开机自启服务的步骤:

1. 创建配置文件

创建一个服务配置文件,以.service为后缀,比如my_service.service

2. 编辑配置文件

使用文本编辑器打开该文件,并添加以下内容:

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

[Service]
ExecStart=/path/to/your/script.sh
WorkingDirectory=/path/to/your/working/directory

[Install]
WantedBy=default.target

在上面的配置中,需要替换/path/to/your/script.sh为你要在开机时运行的脚本的路径,/path/to/your/working/directory为脚本的工作目录。

3. 拷贝配置文件

将该服务配置文件移动到/etc/systemd/system/目录下:

sudo mv my_service.service /etc/systemd/system/

4. 启用服务

使用以下命令启用服务:

sudo systemctl enable my_service

5. 启动服务

使用以下命令启动服务:

sudo systemctl start my_service

现在,该服务将会在每次开机时自动启动。

6. 停止服务

如果需要停止服务,可以使用以下命令:

sudo systemctl stop my_service

7. 禁用服务

如果需要禁用服务,可以使用以下命令:

sudo systemctl disable my_service

配置项解释

配置父项

在systemd中,配置文件通常使用.service扩展名,并且使用INI格式。一个.service文件可以包含以下三个配置项:

  1. [Unit]:这个配置项定义了服务的基本属性,如服务的描述、依赖关系、启动顺序等。在这个配置项中,可以设置服务的名称、描述、依赖关系、启动顺序等。

  2. [Service]:这个配置项定义了服务的具体执行方式,如服务的启动命令、环境变量、工作目录等。在这个配置项中,可以设置服务的启动命令、环境变量、工作目录等。

  3. [Install]:这个配置项定义了服务的安装方式,如服务的启动级别、启动顺序等。在这个配置项中,可以设置服务的启动级别、启动顺序等。

这三个配置项分别定义了服务的基本属性、具体执行方式和安装方式。

除了[Unit][Service][Install]之外,systemd还支持其他一些配置项,用于进一步定义和配置服务。以下是一些常用的配置项:

  1. [Path]:用于监控文件或目录的变化,并在变化发生时触发服务的启动、停止或重启。

  2. [Timer]:用于定义定时器,可以在指定的时间间隔或特定时间点触发服务的启动、停止或重启。

  3. [Socket]:用于定义套接字,可以监听指定的网络端口或UNIX域套接字,并在有连接请求时触发服务的启动。

  4. [Mount]:用于定义挂载点,可以在指定的文件系统挂载或卸载时触发服务的启动、停止或重启。

  5. [Automount]:用于定义自动挂载点,可以在访问指定的文件系统路径时自动挂载该文件系统。

  6. [Swap]:用于定义交换空间,可以在指定的交换文件或分区被启用或禁用时触发服务的启动、停止或重启。

配置子项

[Unit]配置子项

- Description:用于设置服务的描述信息。
- Requires:用于指定服务所依赖的其他服务。
- After:用于指定服务启动的顺序,可以设置在哪些服务之后启动。
- Before:用于指定服务启动的顺序,可以设置在哪些服务之前启动。

[Service]配置子项

- ExecStart:用于指定服务的启动命令。
- WorkingDirectory:用于指定服务的工作目录。
- Environment:用于设置服务的环境变量。
- User:用于指定服务运行的用户。
- Group:用于指定服务运行的用户组。

[Install]配置子项

- WantedBy:用于指定服务在哪些目标(target)下启动。

WantedBy是systemd服务配置文件中的一个选项,用于指定服务所属的启动级别(target)。启动级别是一组定义了系统启动过程中要启动的服务的目标单元的集合。

在systemd中,启动级别由target单元来表示。每个target单元都是一组相关的服务单元的集合,用于定义系统在不同阶段启动时应该启动哪些服务。例如,multi-user.target是一个常见的启动级别,用于表示系统已经启动到多用户模式,此时应该启动所有与用户交互相关的服务。

WantedBy选项用于指定服务所属的启动级别。它接受一个目标单元的名称作为参数。当你将服务配置文件放置在/etc/systemd/system/目录下,并使用systemctl enable命令启用服务时,systemd会根据WantedBy选项中指定的目标单元,将服务添加到相应的启动级别中。

在上面的例子中,WantedBy=multi-user.target表示该服务应该属于multi-user.target启动级别,即系统已经启动到多用户模式时应该启动该服务。

在systemd中,有以下几个常见的启动级别(target):

  1. poweroff.target:系统关机时的目标单元。
  2. rescue.target:用于系统救援的目标单元,提供了一个最小的功能集合,用于修复系统问题。
  3. multi-user.target:多用户模式的目标单元,用于正常的多用户操作。
  4. graphical.target:图形界面模式的目标单元,用于启动图形界面环境。
  5. reboot.target:系统重启时的目标单元。

除了上述常见的启动级别,还有其他一些特定的启动级别,如network.target(网络启动完成后的目标单元)、default.target(默认目标单元,通常是multi-user.targetgraphical.target)等。

对于普通程序来说,通常会将其配置为属于multi-user.targetgraphical.target这样的启动级别,以便在系统启动到多用户模式或图形界面模式时自动启动。你可以根据你的需求选择适合的启动级别。

- RequiredBy:用于指定哪些目标(target)依赖于该服务。

systemd官方文档(systemd.service完整配置选项)

https://www.freedesktop.org/software/systemd/man/systemd.service.html

systemd支持在/etc/systemd/system创建子目录,便于我们方便管理我们的.service文件

systemd会递归遍历/etc/systemd/system目录下的所有.service文件以及子目录中的.service文件。这意味着可以在/etc/systemd/system目录下创建子目录,并在子目录中放置您的服务配置文件。

例如,如果在/etc/systemd/system目录下创建了一个名为my-service的子目录,并将服务配置文件my-service.service放置在该子目录中,systemd仍然能够找到并管理该服务。

这种递归遍历的机制使得您可以更好地组织和管理多个服务的配置文件,而不会造成混乱。

vscode相关插件:Systemd Helper

可以方便我们编辑systemd配置文件:

在这里插入图片描述
在这里插入图片描述

使用软链接链接systemd配置文件

可以将.service文件创建为软链接,链接到实际文件。这样做可以使服务配置文件保持在原始位置,同时在/etc/systemd/system目录下创建一个链接,以便systemd能够找到并管理该服务。

以下是创建软链接的步骤:

  1. /etc/systemd/system目录下创建一个软链接,链接到实际文件。例如,假设实际文件位于/path/to/my-service/my-service.service,可以使用以下命令创建软链接:

    sudo ln -s /path/to/my-service/my-service.service /etc/systemd/system/
    
  2. 确保软链接的文件权限正确设置。一般来说,软链接的所有者应为root用户,权限应为644

    sudo chown root:root /etc/systemd/system/my-service.service
    sudo chmod 644 /etc/systemd/system/my-service.service
    

通过这种方式,服务配置文件将保持在原始位置,而软链接将位于/etc/systemd/system目录下,使systemd能够找到并管理该服务。这样做的好处是,当需要修改或更新服务配置文件时,只需在原始位置进行操作,而不需要修改软链接。

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

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

相关文章

CTFSHOW php 特性

web89 数组绕过正则 include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num]; get numif(preg_match("/[0-9]/", $num)){ 是数字 就输出 nodie("no no no!");}if(intval($num)){ 如果是存在整数 输出 flagecho …

算法通关村第四关——如何基于数组(链表)实现栈

栈的基础知识 栈的特征 特征1 栈和队列是比较特殊的线性表,又被称为 访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现(递归就是方法自己调用自己,在JVM的虚拟机栈中,一个线程中的栈帧就是…

使用分布式数据库,还需要考虑做分库分表吗?

随着数据存储需求的不断增加,分布式数据库成为了处理大规模数据的一种重要方式。分布式数据库可以将数据分散到多个计算节点上,并利用分布式计算的能力来提高数据处理的效率和可用性。然而,在使用分布式数据库的过程中,是否需要进…

网络安全工具包NST发布38-13644版本

导读开源网络安全工具包NST近日发布了最新版本38-13644。该版本基于Fedora 38构建,使用Linux 6.3.12内核,主要针对软件的维护与功能增强进行了更新。 根据发布公告,新版本通过Docker容器方式重构了OpenVAS和Greenbone漏洞扫描组件,实现了完整的漏洞评估能力。另外,还增强了地理…

微信公众号程序PHP源码 收银台源码 商家PHP源码 微信支付扫码付款 商家收银台

商家收银台-微信支付扫码付款-微信支付收银台-PHP源码 微信公众号程序,必须微信认证服务号,微信支付商家 客户扫码,打开商家定义支付页面,输入金额和对应定义信息,提交微信支付,实现快速付款 支持创建多…

信息系统网络安全整改方案

第1章 项目概述 1.1 项目目标 本方案将通过对公司网络信息系统的安全现状进行分析工作,参照国家信息系统等级保护要求,找出信息系统与安全等级保护要求之间的差距,给出相应的整改意见,推动 XX 企业公司网络信息系统安全整改工作的…

将jar包打入本地maven仓库

1、准备好要入仓的jar包 2、在jar包所在文件夹打开cmd 3、输入如下命令进行打包 mvn install:install-file -DgroupIdcom.netty.common -DartifactIdnetty-common -Dversion1.0-SNAPSHOT -Dpackagingjar -Dfilenetty-common-1.0-SNAPSHOT.jar如下图所示:

TCP连接的状态详解以及故障排查(三)

TCP连接建立三次握手 TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接。 Client连接Server: 当Client端调用socket函数调用时,相当于Client端产生了一个处于Closed状态的套接字。 (1)第一次握手&a…

10.事件流

10.1事件流和两个阶段说明 ●事件流指的是事件完整执行过程中的流动路径 简单来说:捕获阶段是从父到子 冒泡阶段是从子到父 10.2事件捕获 事件捕获概念: 从DOM的根元素开始去执行对应的事件(从外到里) ●事件捕获需要写对应代码才能看到效果 ●代码:…

Java从入门到精通(三)· 基础逻辑

Java从入门到精通(三) 基础逻辑 一 分支结构 1.if分支 if分支是根据条件的真假来决定执行某段代码。 If 分支的小技巧和常见问题: 2.switch分支 通过比较变量的值来确定执行哪条分支。 switch的使用注意事项: 当存在多个case分…

基于Java的闲置物品管理系统(源码+文档+数据库)

很多在校学生经常因为冲动或者因为图一时的新鲜,购买了很多可能只是偶尔用一下的物品,大量物品将会闲置,因此,构建一个资源共享平台,将会极大满足师院学生的需求,可以将其闲置物品挂在资源共享平台上让有需要的学生浏览&#xff0…

玩转graphQL

转载至酒仙桥的玩转graphQL - SecPulse.COM | 安全脉搏 前言 在测试中我发现了很多网站开始使用GraphQL技术,并且在测试中发现了其使用过程中存在的问题,那么,到底GraphQL是什么呢?了解了GraphQL后能帮助我们在渗透测试中发现哪些…

Go语言Gin框架的基本用法

目录 【基本的HTTP请求】 GET请求 POST请求 文件操作 重定向 HTTP获取三方服务数据 不同格式的内容输出 异步请求 【中间件】 中间件校验数据 登录中间件 【启动多个服务】 Gin框架官网:https://gin-gonic.com/zh-cn/,新增一个Go文件&…

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能,还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后,专用于机器人的RT-2大模型于近期面世,它能让机器人学习互联网上的文本和图像,并具备逻辑推理能力。 该模型为机器人智能带来显著升级…

光线追踪会影响3D渲染速度吗?

什么是光线追踪? 光线追踪 是模拟光源在现实生活中如何反应的方法。它追踪光线到达物体的路径,真实地模拟光线如何反射回来,以创建准确的反射、折射、阴影和间接照明。 我们在光线追踪中经常遇到的术语之一是路径追踪。它们是一样的吗&#x…

有什么进行仓库出入库管理的软件?

公司的仓库管理一直都是难题,不论是仓库进货发货,还是仓库储存,每一步都至关重要。其实对于仓库管理系统来说,主要包括以下三个需求: 1.录入商品信息2.记录进出货过程3.查询分析仓库数据 那么有哪些进行仓库出入库管…

【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

请求参数传json对象,后端采用(pojo)接受的前提条件: 1.Spring Boot 的启动类加注解:EnableWebMvc 2.Spring Boot 的控制层接受参数采用:RequestBody Spring Boot 启动类:加注解:En…

03 制作Ubuntu启动盘

1 软碟通 我是用软碟通制作启动盘。安装软碟通时一定要把虚拟光驱给勾选上,其余两个可以看你心情。 2 镜像文件 我使用清华镜像网站找到的Ubuntu镜像文件。 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 请自己选择镜像…

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场…

【实操教程】如何开始用Qt Widgets编程?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中&#xff0…