在 Linux 中使用 systemd 注册服务
Systemd 是一种现代的 Linux 系统初始化系统和服务管理器。它旨在管理系统服务的初始化、配置和控制。Systemd 的一个关键特性是它可以管理服务,这些服务是为系统提供特定功能的后台进程。在本指南中,我们将探讨如何使用 systemd 在 Linux 中注册服务。
在 Linux 系统中,systemd 已经逐渐取代了传统的 init 系统,成为默认的系统和服务管理器。通过 systemd,我们可以方便地在 Linux 系统中注册新服务。
前提条件
在继续之前,请确保您对 Linux 命令行有基本的了解,并具有 root 或超级用户权限。
systemd 服务文件
要在 systemd 中定义一个服务,需要创建一个 .service 文件,文件通常放在 /etc/systemd/system/ 目录下。这个服务文件包含了一些字段和配置来告诉 systemd 如何管理这个服务。
一个基本的 .service 文件常包括以下三个主要区块:
[Unit]
这个区块定义了服务的基本信息,如描述、启动顺序等。常见的字段有:
Description: 对服务的简单描述After: 定义启动顺序,该服务会在指定的其他服务启动完后再启动Requires:与After类似,但如果指定的其他服务启动失败,该服务也不会启动
[Service]
这个区块定义了服务的启动、重启及权限参数。常见的字段有:
ExecStart: 启动服务的命令ExecReload:重启服务的命令Restart:定义服务退出后的重启方式,比如always表示总是重启User:指定运行服务的用户和组Environment:指定服务的环境变量
[Install]
这个区块定义如何安装这个服务到系统中。常见的字段有:
WantedBy:它的值是一个或多个target,这个服务会在这些target启动时被启动Alias:服务的别名,可以通过别名控制服务
下面是一个基本的 .service 文件示例:
[Unit]
Description=My Custom Service
After=network.target[Service]
ExecStart=/usr/bin/myservice
Restart=always
User=nobody[Install]
WantedBy=multi-user.target
这个服务会在网络服务启动后启动,使用 nobody 用户运行 /usr/bin/myservice,并且在服务退出时总是重启。
注册服务
创建好 .service 文件后,需要以下步骤来注册这个服务:
-
重新加载 systemd,让它读取新的服务文件:
sudo systemctl daemon-reload -
启用服务,它会创建启动脚本的符号链接:
sudo systemctl enable myservice.service -
启动服务
sudo systemctl start myservice.service
现在这个 myservice 就已经成为系统服务,开机会自动启动,可以使用 systemctl 来管理服务。
控制服务
通过 systemctl 工具可以方便地控制和管理服务,常用的命令包括:
systemctl start service- 启动服务systemctl stop service- 停止服务systemctl restart service- 重启服务systemctl reload service- 重新加载配置而不中断服务systemctl status service- 查看服务当前状态systemctl enable service- 设置开机启动systemctl disable service- 禁用开机启动
以上就是如何在 Linux 系统中使用 systemd 注册管理服务的简要介绍。通过创建 .service 文件和 systemctl 工具,我们可以方便地将应用转换为系统服务,并实现自动启动等管理。
示例
第一步:创建服务脚本
第一步是创建一个定义您的服务行为的脚本。这个脚本可以用任何脚本语言编写,比如 Bash 或 Python。在这个示例中,让我们创建一个简单的 Bash 脚本,它会将一条消息回显到日志文件中。
创建一个名为 my_service.sh 的文件,然后添加以下内容:
#!/bin/bashecho "我的服务正在运行,时间:$(date)" >> /var/log/my_service.log
第二步:配置服务
接下来,我们将创建一个 systemd 服务配置文件,定义 systemd 如何管理该服务。
在 /etc/systemd/system/ 目录中创建一个名为 my_service.service 的文件(如果该目录不存在,则创建它),然后添加以下内容:
[Unit]
Description=我的自定义服务
After=network.target[Service]
Type=simple
ExecStart=/path/to/my_service.sh[Install]
WantedBy=default.target
将 /path/to/my_service.sh 替换为您的服务脚本的实际路径。
第三步:启用并启动服务
一旦服务配置准备就绪,您可以使用以下命令启用并启动服务:
sudo systemctl enable my_service.service
sudo systemctl start my_service.service
enable 命令确保服务在系统启动时自动启动。
第四步:检查服务状态
要检查您的服务状态,使用以下命令:
sudo systemctl status my_service.service
这将提供有关服务是否运行、其 PID 以及最近的日志条目的信息。
第五步:停止并禁用服务
如果您想停止服务并阻止它在系统启动时启动,可以使用以下命令:
sudo systemctl stop my_service.service
sudo systemctl disable my_service.service
结论
Systemd 提供了在 Linux 中管理服务的强大且标准化的方式。按照本指南中的步骤,您可以轻松地注册自己的自定义服务,并使其由系统自动管理。无论您是否正在运行后台进程、守护进程或其他长时间运行的任务,systemd 都简化了服务管理的过程。
请根据您自己的设置调整示例中的路径和配置。借助 systemd,您拥有一个可靠的工具来管理和控制 Linux 系统上的服务。
相关文章:
在 Linux 中使用 systemd 注册服务
Systemd 是一种现代的 Linux 系统初始化系统和服务管理器。它旨在管理系统服务的初始化、配置和控制。Systemd 的一个关键特性是它可以管理服务,这些服务是为系统提供特定功能的后台进程。在本指南中,我们将探讨如何使用 systemd 在 Linux 中注册服务。 …...
(03)Unity HTC VRTK 基于 URP 开发记录
1.简介 本篇主要内容为:URP如何与VRTK结合、URP需要注意的地方、VRTK的功能进行阐述。 因项目本身要求要渲染出比较好的画质,所以抛弃了Unity默认渲染管线Built-in,使用URP进行渲染,当然也可以选HDRP,但考虑到后期项目…...
.bit域名调研
.bit域名研究 问题: .bit域名和ENS域名的相同点?不同点?有什么关系? .bit的定义 .bit 是基于区块链的,开源的,跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系,可用于加密…...
Vue数组变更方法和替换方法
一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括: push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组,下面来分别讲解它们的区别&…...
Centos-6.3安装使用MongoDB
安装说明 系统环境:Centos-6.3 安装软件:mongodb-linux-x86_64-2.2.2.tgz 下载地址:http://www.mongodb.org/downloads 安装机器:192.168.15.237 上传位置:/usr/local/ 软件安装位置:/usr/local/mongodb 数…...
Mysql 复杂查询丨联表查询
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! JOIN(联表查询) 联表查询(Join)是一种在数据库中使用多个表进行关联查询的操作。它通过使用 JOIN 关键字将多个表连接在…...
C语言进阶第二课-----------指针的进阶----------升级版
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
若依vue -【 111 ~ 更 ~ 127 完 】
【更】111 3.5.0版本更新介绍 112 使用docker实现一键部署 1、安装docker yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm yum install -y yum-utils device-mapper-persistent-data lvm2 yum-c…...
vue-pc端实现按钮防抖处理-自定义指令
前言 我们经常在移动端会处理按钮和输入框的防抖和节流处理,在pc端很少进行这样的操作 但是在pc端也是可以进行按钮的防抖操作,这样也是比较合理,可以不用但不可以不会 我们只要配合vue项目自定义指令加上全局注册,就可以实现按…...
python解决8皇后问题
def is_valid(queens, row, col):for i in range(row):if queens[i] == col or abs(queens[i] - col) == abs(i - row):return Falsereturn Truedef solve_n_queens(n, row, queens, result):if row == n:result.append(queens[:]) # 将当前解添加到结果中returnfor col in ra…...
xcode打包导出ipa
转载:xcode打包导出ipa 目录 转载:xcode打包导出ipa 第一步:注册苹果开发者账号 第二步:下载APP Uploader 第三步:使用xcode打包导出ipa文件,供其他人内测 众所周知,在开发苹果应用时需要使…...
更优雅地调试SwiftUI—借助LLDB
更优雅地调试SwiftUI—借助LLDB 概述 你是否写过这样的代码: struct ContentView: View {@State private var mySize: CGFloat = 15.0var myString: String = "Hi LLDB"var myArray: [Int] = [1, 2, 3]var body: some View {VStack {Text("Hello World"…...
2.4 网络安全新技术
数据参考:CISP官方 目录 云计算安全大数据安全移动互联网安全物联网安全工业互联网安全 一、云计算安全 1、云计算定义 云计算是指通过网络访问可扩展的、灵活的物理或虚拟共享资源池,并按需自助获取和管理资源的模式。在云计算中,计算资…...
人生天地之间,若白驹之过隙,忽然而已
人生天地之间,若白驹之过隙,忽然而已 这段时间有个同事离职了,其实身边不断有老人走、有新人来,但这回走的同事和别的有些不同,当时我入职面试的时候就是他面试的我,工作中有啥问题都会请教他,…...
MySQL — MVCC
文章目录 MVCCMVCC 实现原理隐藏字段undo logundo log的用途undo log类型 版本链ReadView MVCC InnoDB是一个多版本的存储引擎。它保留有关已更改行的旧版本的信息,以支持并发和回滚等事务性特性。这些信息存储在undo表空间中的数据结构称为回滚段。InnoDB使用回滚…...
Android模板设计模式之 - 构建整个应用的BaseActivity
1. 模式介绍 模式的定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模式的使用场景 1.多个子类有公有的方法,并且逻辑基本相同时。 2.重要、复杂的算法,可…...
浏览器缓存技术--localStorage和sessionStorage原理与使用
localStorage和sessionStorage LocalStorageLocalStorage的特点存入/读取数据使用场景 sessionStoragesessionStorage的特点存入/读取数据使用场景sessionStorage 、localStorage 和 cookie 之间的区别 测试localStorage和sessionStorageIndexedDB LocalStorage 为了弥补 Cook…...
无涯教程-Perl - endservent函数
描述 此功能告诉系统您不再期望使用getservent从服务文件中读取条目。 语法 以下是此函数的简单语法- endservent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile(($name, $aliases, $port_number,$protocol_name)getservent())…...
MRO工业品采购过程中,采购人员要注意哪些事项
MRO工业品指工厂或企业对其生产和工作设施、设备进行保养、维修,保证其运行所需要的非生产性物料,这些物料可能是用于设备保养、维修的备品备件,也可能是保证企业正常运行的相关设备,耗材等物资,如安全防护、传媒广电、…...
Jaeger 教程,OpenTelemetry 教程
ywanbing/otelToJaeger: opentelemetry 的链路追踪写入Jaeger中,使用的例子,拉下来就能跑(你已经部署好Jaeger的环境) (github.com) 上面是一个使用 OpenTelemetry trace 的一个源码。...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...
【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
HTML版英语学习系统
HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…...
【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...
