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

在 Linux 系统中设置 Service 服务开机自启的详细指南

目录

  • 在 Linux 系统中设置 Service 服务开机自启的详细指南
    • 一、Linux 服务管理概述
    • 二、`systemd` 中设置服务开机自启
      • 2.1 `systemd` 介绍
      • 2.2 如何检查服务的状态
      • 2.3 启用服务开机自启
      • 2.4 手动启动和停止服务
      • 2.5 检查服务是否成功启用
      • 2.6 禁用开机自启服务
    • 三、在 `sysvinit` 中设置服务开机自启
      • 3.1 使用 `chkconfig` 设置开机自启
      • 3.2 手动管理开机脚本
    • 四、创建自定义 `systemd` 服务
      • 4.1 创建服务单元文件
      • 4.2 服务单元文件配置
      • 4.3 重新加载 `systemd` 配置
      • 4.4 启用和启动服务
      • 4.5 检查服务状态
    • 五、常见问题与故障排查
      • 5.1 服务无法启动或启动失败
      • 5.2 服务没有启用开机自启
      • 5.3 `systemd` 服务单元文件配置错误
    • 六、总结

在 Linux 系统中设置 Service 服务开机自启的详细指南

在 Linux 系统中,确保关键服务能够在系统启动时自动运行是一项非常重要的任务。尤其是在服务器环境中,我们希望一些服务(如数据库、应用服务或自定义脚本)能够在系统每次启动后自动启动,从而确保业务的持续运行。在 Linux 中,常用的服务管理系统有两种:systemdsysvinit。本指南将详细介绍如何在不同的 init 系统中设置服务的开机自启,并讲解如何创建和配置自定义的 systemd 服务。

一、Linux 服务管理概述

在 Linux 中,服务是后台运行的进程,它们在系统启动时开始运行,并且在系统关闭时停止。管理这些服务的工具因操作系统版本的不同而不同:

  1. systemd:大多数现代 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+、Debian 8+)都使用 systemd 来管理系统服务。
  2. sysvinit:一些较老的 Linux 发行版(如 CentOS 6 或 Ubuntu 14.04)使用 sysvinit 来管理服务。

每种服务管理工具都有自己的配置方式和管理命令。在现代 Linux 系统中,systemd 是最常见的服务管理工具,因此它也是我们讨论的重点。

二、systemd 中设置服务开机自启

2.1 systemd 介绍

systemd 是 Linux 的一种系统和服务管理器,负责系统的引导过程,管理系统运行时的服务,并提供许多系统功能,如日志、时间同步等。它通过服务单元文件(通常为 .service 文件)来定义和管理服务,并提供强大的依赖管理和并行启动功能。

2.2 如何检查服务的状态

首先,你需要确保服务已经由 systemd 管理,并且能够手动启动。你可以使用以下命令检查服务的状态:

sudo systemctl status <service_name>

例如,如果你的服务名称是 nginx,你可以使用以下命令检查它的状态:

sudo systemctl status nginx

输出信息会显示服务是否正在运行,以及服务的日志和状态信息。如果服务已被 systemd 管理,它会显示当前服务的详细信息。

2.3 启用服务开机自启

要设置某个服务在系统启动时自动运行,你可以使用 systemctl enable 命令。它将服务添加到系统的启动项中,确保在每次启动时都会启动该服务。

sudo systemctl enable <service_name>

例如,要设置 nginx 服务开机自启,运行以下命令:

sudo systemctl enable nginx

这会在 /etc/systemd/system/multi-user.target.wants/ 目录中为指定服务创建一个符号链接,确保服务在系统启动时自动运行。

2.4 手动启动和停止服务

如果你想立即启动或停止某个服务,可以使用以下命令:

  • 启动服务

    sudo systemctl start <service_name>
    
  • 停止服务

    sudo systemctl stop <service_name>
    

这些命令将立即启动或停止指定的服务。你可以使用它们来验证服务是否正常运行。

2.5 检查服务是否成功启用

你可以使用以下命令检查服务是否已成功启用开机自启:

sudo systemctl is-enabled <service_name>

如果服务已成功启用,输出将显示 enabled。如果服务未启用或未正确配置,输出将显示 disabled

2.6 禁用开机自启服务

如果你不再希望某个服务在系统启动时自动启动,可以使用 systemctl disable 命令:

sudo systemctl disable <service_name>

例如,禁用 nginx 服务开机自启的命令是:

sudo systemctl disable nginx

禁用服务后,它将在系统启动时不再自动启动,但你仍然可以手动启动该服务。

三、在 sysvinit 中设置服务开机自启

虽然 systemd 是当前 Linux 发行版的标准,但较老的发行版(如 CentOS 6、Debian 7 等)仍然使用 sysvinit 来管理服务。在 sysvinit 中,服务的开机自启配置与 systemd 不同,以下是相关步骤。

3.1 使用 chkconfig 设置开机自启

chkconfig 是管理 sysvinit 服务开机自启的工具。你可以使用它来启用或禁用服务的开机自启。

  • 启用开机自启

    sudo chkconfig <service_name> on
    
  • 禁用开机自启

    sudo chkconfig <service_name> off
    

例如,要启用 httpd(Apache)服务的开机自启,运行以下命令:

sudo chkconfig httpd on

3.2 手动管理开机脚本

sysvinit 系统中,服务启动脚本存放在 /etc/init.d/ 目录下。你可以通过手动添加服务的启动脚本来管理服务的开机自启。

  • 列出所有服务

    你可以使用以下命令查看系统中所有可用的服务脚本:

    ls /etc/init.d/
    
  • 手动添加服务到开机自启

    你可以使用 update-rc.d 命令将服务添加到开机启动项:

    sudo update-rc.d <service_name> defaults
    

    这会在适当的运行级别中添加服务,确保它在系统启动时自动运行。

四、创建自定义 systemd 服务

如果你有一个自定义的脚本或程序,希望在系统启动时运行,可以通过创建 systemd 服务来实现。

4.1 创建服务单元文件

systemd 服务通过服务单元文件(.service 文件)来管理。首先,你需要在 /etc/systemd/system/ 目录中创建一个新的服务文件。例如,创建一个名为 myservice.service 的文件:

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

4.2 服务单元文件配置

在文件中添加服务的相关配置。以下是一个自定义服务的示例:

[Unit]
Description=My Custom Service
After=network.target[Service]
ExecStart=/path/to/your/program --argument
Restart=always
User=youruser
Group=yourgroup[Install]
WantedBy=multi-user.target

解释:

  • [Unit]:定义服务的描述和依赖。After=network.target 表示该服务会在网络启动后启动。
  • [Service]:定义服务的启动命令、重启策略、运行用户等。ExecStart 是服务启动时执行的命令。
  • [Install]:定义服务在哪个运行级别下启动。multi-user.target 表示该服务将在多用户模式下启动。

4.3 重新加载 systemd 配置

保存服务单元文件后,使用以下命令重新加载 systemd 配置:

sudo systemctl daemon-reload

这会告诉 systemd 读取新的服务单元文件并更新服务列表。

4.4 启用和启动服务

接下来,你可以启用并启动该服务:

sudo systemctl enable myservice
sudo systemctl start myservice

4.5 检查服务状态

使用以下命令检查自定义服务是否正在运行:

sudo systemctl status myservice

输出信息会显示服务的当前状态、日志以及是否成功启动。

五、常见问题与故障排查

在设置服务开机自启时,可能会遇到一些常见问题。以下是一些常见问题的排查方法。

5.1 服务无法启动或启动失败

如果你发现服务无法启动,首先检查服务的状态:

sudo systemctl status <service_name>

如果服务启动失败,输出信息通常会显示失败的原因。可以进一步查看详细日志,帮助诊断问题:

sudo journalctl -xe

5.2 服务没有启用开机自启

检查服务是否已启用开机自启:

sudo systemctl is-enabled <service_name>

如果显示 disabled,可以重新启用开机自启:

sudo systemctl enable <service_name>

5.3 systemd 服务单元文件配置错误

如果你创建的自定义服务无法正常运行,检查以下几点:

  • **路径和命令

是否正确**:确保 ExecStart 中指定的路径和命令正确。

  • 权限问题:确保服务的运行用户有权限执行服务所需的命令和访问文件。
  • 日志检查:使用 journalctl 命令查看服务的日志,查找详细的错误信息。

六、总结

在 Linux 系统中设置服务开机自启是确保服务器稳定运行的重要任务之一。无论是使用 systemd 还是 sysvinit,你都可以轻松地管理系统服务的启动行为。现代 Linux 系统大多数都使用 systemd 来管理服务,它提供了灵活的服务管理功能和丰富的日志记录功能。而在较旧的 Linux 发行版中,sysvinit 系统也有一套简单的服务管理方式。

此外,创建自定义服务并将其配置为开机自启是 Linux 管理中的常见需求。通过编写自定义的 .service 文件,并使用 systemd 进行管理,你可以轻松控制自定义服务的启动和运行。

希望本文能够帮助你在 Linux 系统中正确设置和管理服务的开机自启。如果在实际操作中遇到问题,建议根据系统日志和服务状态进行排查,并及时调整配置。

相关文章:

在 Linux 系统中设置 Service 服务开机自启的详细指南

目录 在 Linux 系统中设置 Service 服务开机自启的详细指南一、Linux 服务管理概述二、systemd 中设置服务开机自启2.1 systemd 介绍2.2 如何检查服务的状态2.3 启用服务开机自启2.4 手动启动和停止服务2.5 检查服务是否成功启用2.6 禁用开机自启服务 三、在 sysvinit 中设置服…...

Flythings学习(四)串口通信

文章目录 1 串口编程基本步骤1.1 打开串口1.2 配置串口 1.3 读串口1.4 发送串口1.5 关闭串口 2 综合使用3 如何在软件上保证串口稳定通信4 flythings中的串口通讯5 协议接收部分使用和修改方法6 通讯协议数据怎么和UI控件对接 1 串口编程基本步骤 串口通信有5个步骤 1.打开串口…...

[数据结构]带头双向循环链表的实现与应用

文章目录 一、引言二、链表的基本概念1、链表是什么2、链表与顺序表的区别3、带头双向循环链表 三、带头双向循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析带头双向循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引言 链表作…...

商品详情数据API接口开发系列(属性规格详情图sku等)

商品详情数据API接口开发是一个复杂但至关重要的过程&#xff0c;它涉及多个方面&#xff0c;包括属性规格、详情图、SKU等关键信息的处理。以下是对该开发系列中这些关键要素的详细探讨&#xff1a; 一、商品详情数据API接口概述 商品详情数据API接口是指一种编程接口&#x…...

在 Ubuntu 上安装 clang-format-14

在 Ubuntu 上安装 clang-format-14 可以通过以下步骤完成&#xff1a; 1. 添加 LLVM 的官方 APT 仓库 首先&#xff0c;你需要添加 LLVM 的官方 APT 仓库&#xff0c;以便能够安装最新版本的 clang-format。 # 安装必要的依赖 sudo apt update sudo apt install -y wget gnu…...

【优选算法篇】双指针的华丽探戈:深入C++算法殿堂的优雅追寻

文章目录 C 双指针详解&#xff1a;进阶题解与思维分析前言第一章&#xff1a;有效三角形的个数1.1 有效三角形的个数示例 1&#xff1a;示例 2&#xff1a;解法一&#xff08;暴力求解&#xff09;解法二&#xff08;排序 双指针&#xff09;易错点提示代码解读 第二章&#…...

【springboot入门-mvc常用注解使用方式及原理】

常用注解 PathVariable&#xff1a;用于从URL路径中提取变量。RequestHeader&#xff1a;用于从HTTP请求头中获取数据。ModelAttribute&#xff1a;用于获取请求参数&#xff08;包括URL参数和POST请求的表单数据&#xff09;&#xff0c;也可以用于将数据绑定到对象上。Reque…...

滚雪球学Redis[4.2讲]:Redis Sentinel 深度解析:工作原理、配置与高可用架构下的故障转移

全文目录&#xff1a; &#x1f389;前言&#x1f6a6;4.2 Redis Sentinel&#x1f504;Sentinel的工作原理Sentinel的选举机制 ⚙️Sentinel的配置与使用示例&#xff1a;配置Redis SentinelSentinel自动故障转移过程示例 &#x1f9e9;高可用架构下的故障转移常见问题与优化实…...

Vue3 -- 设置分页,切换分页之后选项仍能保留 控制多个表格的选中不会互相影响

在 Vue 3 中实现分页功能&#xff0c;并确保在切换分页时选中的选项能够保留&#xff0c;同时控制多个表格之间的选中状态不互相影响&#xff0c;可以按照以下步骤进行&#xff1a; 1. 数据结构设计 为每个表格维护独立的选中项和分页状态。可以使用一个对象来存储每个表格的…...

如何在 JSON 中编写“anyOf”语句?

在 JSON 中&#xff0c;anyOf 语句通常用于 JSON Schema&#xff08;JSON 模式&#xff09;中&#xff0c;来定义多个可能的模式&#xff0c;表示数据可以匹配多个子模式中的任意一个。这种功能常用于验证 JSON 数据是否符合某一组可能的条件之一。 1、问题背景 问题&#xff…...

python开发环境配置

下载python安装包安装python配置环境变量调整类库下载位置 安装python 安装python是指安装python的基础编译环境及python运行所需的必须资源&#xff0c;类似于安装java的JDK python2与python3差异 进行python安装前&#xff0c;需要先了解python2和python3的差异&#xff0…...

QT开发--QT SQL模块

第十五章 QT SQL模块 15.1 QT SQL模块概览 Qt SQL模块是Qt框架中操作数据库的组件&#xff0c;提供易用API&#xff0c;支持SQLite、MySQL等多种数据库。它包含数据库驱动与连接功能。 15.1.1 QSqlDatabase 类 在Qt SQL模块中&#xff0c;数据库驱动基于QSqlDriver类&#xf…...

如何保证接口幂等性?

一、什么是接口幂等性&#xff1f; 幂等性是指&#xff1a;同一请求&#xff0c;执行很多次&#xff0c;最终结果都一样。 二、为什么会产生接口幂等性问题&#xff1f; 那么&#xff0c;什么情况下&#xff0c;会产生接口幂等性的问题呢&#xff1f; 网络波动, 可能会引起重…...

【9718】基于springboot+vue的生鲜交易系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 生鲜交易管理方面的任务繁琐,以至于交易市场每年都在生…...

Spring循环依赖解决方案

解决方案 使用提前暴露机制三级缓存进行解决 singletonObjects一级缓存&#xff0c;存放完整的 Bean。earlySingletonObjects二级缓存&#xff0c;存放提前暴露的Bean&#xff0c;Bean 是不完整的&#xff0c;未完成属性注入和执行 init 方法。singletonFactories三级缓存(用…...

解决 IntelliJ IDEA 运行时 “Command line is too long“ 问题

文章目录 文章标题&#xff1a;解决 IntelliJ IDEA 运行时 "Command line is too long" 问题简介问题描述解决方案代码示例代码示例1&#xff1a;使用JAR Manifest代码示例2&#xff1a;使用Classpath File代码示例3&#xff1a;优化项目依赖 结论进一步的资源 文章标…...

鸿蒙网络编程系列5-TCP连接超时分析

1. TCP连接超时简介 TCP是面向连接的协议&#xff0c;通过三次握手建立连接&#xff0c;但是&#xff0c;在建立连接的过程中对方有可能没有响应&#xff0c;这时候发起连接的一方会重试&#xff0c;如果重试多次仍然没有响应&#xff0c;就会触发超时&#xff0c;从而导致连接…...

金蝶云星空移动字段后关闭页面后重新打开无效

有同事反馈&#xff0c;单据的明细字段里面移动了字段&#xff0c;然后退出&#xff0c;其他字段都能按最后排版的位置显示&#xff0c;有个别字段始终无法按照排版的位置显示。 只需要打开BOS平台&#xff0c;找到对应字段&#xff0c;然后更改可见性。...

幂律分布笔记

一、幂律分布的数据拟合 数据分箱&#xff1a; 所谓分箱就是对原始数据进行分组&#xff0c;然后对每一组内的数据进行平滑处理。常见的分箱方式主要有等深分箱、等宽分箱、用户自定义等 对数分箱&#xff1a; 对原数据进行分箱&#xff0c;第i个箱的宽度为bi&#xff0c;b…...

一些NLP代表性模型

&#xff08;一&#xff09;BERT 由Bidirectional Encoder Representations from Transformers的首字母组成&#xff0c;是encoder-only结构类型的代表。 模型分预训练和微调两步&#xff0c;预训练任务有两类&#xff1a;masked language model(MLM)、next sentence predict…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...