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

在 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 文件后,需要以下步骤来注册这个服务:

  1. 重新加载 systemd,让它读取新的服务文件:

    sudo systemctl daemon-reload
    
  2. 启用服务,它会创建启动脚本的符号链接:

    sudo systemctl enable myservice.service
    
  3. 启动服务

    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语言进阶第二课-----------指针的进阶----------升级版

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…...

若依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 的一个源码。...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...