在 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 中,常用的服务管理系统有两种:systemd
和 sysvinit
。本指南将详细介绍如何在不同的 init 系统中设置服务的开机自启,并讲解如何创建和配置自定义的 systemd
服务。
一、Linux 服务管理概述
在 Linux 中,服务是后台运行的进程,它们在系统启动时开始运行,并且在系统关闭时停止。管理这些服务的工具因操作系统版本的不同而不同:
systemd
:大多数现代 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+、Debian 8+)都使用systemd
来管理系统服务。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接口开发是一个复杂但至关重要的过程,它涉及多个方面,包括属性规格、详情图、SKU等关键信息的处理。以下是对该开发系列中这些关键要素的详细探讨: 一、商品详情数据API接口概述 商品详情数据API接口是指一种编程接口&#x…...
在 Ubuntu 上安装 clang-format-14
在 Ubuntu 上安装 clang-format-14 可以通过以下步骤完成: 1. 添加 LLVM 的官方 APT 仓库 首先,你需要添加 LLVM 的官方 APT 仓库,以便能够安装最新版本的 clang-format。 # 安装必要的依赖 sudo apt update sudo apt install -y wget gnu…...

【优选算法篇】双指针的华丽探戈:深入C++算法殿堂的优雅追寻
文章目录 C 双指针详解:进阶题解与思维分析前言第一章:有效三角形的个数1.1 有效三角形的个数示例 1:示例 2:解法一(暴力求解)解法二(排序 双指针)易错点提示代码解读 第二章&#…...
【springboot入门-mvc常用注解使用方式及原理】
常用注解 PathVariable:用于从URL路径中提取变量。RequestHeader:用于从HTTP请求头中获取数据。ModelAttribute:用于获取请求参数(包括URL参数和POST请求的表单数据),也可以用于将数据绑定到对象上。Reque…...
滚雪球学Redis[4.2讲]:Redis Sentinel 深度解析:工作原理、配置与高可用架构下的故障转移
全文目录: 🎉前言🚦4.2 Redis Sentinel🔄Sentinel的工作原理Sentinel的选举机制 ⚙️Sentinel的配置与使用示例:配置Redis SentinelSentinel自动故障转移过程示例 🧩高可用架构下的故障转移常见问题与优化实…...
Vue3 -- 设置分页,切换分页之后选项仍能保留 控制多个表格的选中不会互相影响
在 Vue 3 中实现分页功能,并确保在切换分页时选中的选项能够保留,同时控制多个表格之间的选中状态不互相影响,可以按照以下步骤进行: 1. 数据结构设计 为每个表格维护独立的选中项和分页状态。可以使用一个对象来存储每个表格的…...

如何在 JSON 中编写“anyOf”语句?
在 JSON 中,anyOf 语句通常用于 JSON Schema(JSON 模式)中,来定义多个可能的模式,表示数据可以匹配多个子模式中的任意一个。这种功能常用于验证 JSON 数据是否符合某一组可能的条件之一。 1、问题背景 问题ÿ…...

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

QT开发--QT SQL模块
第十五章 QT SQL模块 15.1 QT SQL模块概览 Qt SQL模块是Qt框架中操作数据库的组件,提供易用API,支持SQLite、MySQL等多种数据库。它包含数据库驱动与连接功能。 15.1.1 QSqlDatabase 类 在Qt SQL模块中,数据库驱动基于QSqlDriver类…...
如何保证接口幂等性?
一、什么是接口幂等性? 幂等性是指:同一请求,执行很多次,最终结果都一样。 二、为什么会产生接口幂等性问题? 那么,什么情况下,会产生接口幂等性的问题呢? 网络波动, 可能会引起重…...

【9718】基于springboot+vue的生鲜交易系统
作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 生鲜交易管理方面的任务繁琐,以至于交易市场每年都在生…...
Spring循环依赖解决方案
解决方案 使用提前暴露机制三级缓存进行解决 singletonObjects一级缓存,存放完整的 Bean。earlySingletonObjects二级缓存,存放提前暴露的Bean,Bean 是不完整的,未完成属性注入和执行 init 方法。singletonFactories三级缓存(用…...

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

鸿蒙网络编程系列5-TCP连接超时分析
1. TCP连接超时简介 TCP是面向连接的协议,通过三次握手建立连接,但是,在建立连接的过程中对方有可能没有响应,这时候发起连接的一方会重试,如果重试多次仍然没有响应,就会触发超时,从而导致连接…...

金蝶云星空移动字段后关闭页面后重新打开无效
有同事反馈,单据的明细字段里面移动了字段,然后退出,其他字段都能按最后排版的位置显示,有个别字段始终无法按照排版的位置显示。 只需要打开BOS平台,找到对应字段,然后更改可见性。...

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

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

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...