在 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 系统上的服务。

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

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

相关文章

【算法基础20-单调栈】

算法原理: 用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。 以:3 4 2 7 5 为例,过程如下: 动态模拟过程 题目: 给定一个长度为 N 的整数数列,输出每个数左边第一…

Linux 基础(九)软件包管理

软件包管理 概念软件包管理工具Red Hat 系RPMrpm安装rpm卸载 YUM(推荐)源仓库管理常见国内 yum 源更换源(非必须,除非下载速度确实过慢) YUM管理软件 Debian 系源仓库管理常见国内 apt 源更换源(非必须&…

postman入门基础 —— 接口测试流程

一、编写接口测试计划 接口测试计划和功能测试计划目标一致,都是为了确认需求、确定测试环境、确定测试方法,为设计测试用例做准备,初步制定接口测试进度方案。一般来说,接口测试计划包括概述、测试资源、测试功能、测试重点、测试…

Flutter 报错 Could not create task ‘xxx‘.this and base files have different roots

遇到此问题也是先去百度了,有的说改了Gradle版本、gradle-wrapper.properties版本和ext.kotlin_version版本之后解决的,我没尝试,我用蹩脚的英语大致读了一下就不是这样说的,况且我用有道翻译了也不是这个意思啊,我不知…

抖音小程序实现less语言编译样式

1.在抖音开发工具中搜索扩展less 2. 然后点击小齿轮选择扩展设置 3. 然后在扩展设置中选择在settings.json中编辑# 4. 在settings.json中加入以下这段代码即可 // Easy LESS配置"less.compile": {"compress": false,//是否压缩"sourceMap": fal…

前端性能优化:缓存

在快节奏的互联网时代,网站的加载速度直接影响用户体验和业务成功。而缓存作为性能优化的重要手段,可以大幅提升网页加载速度,减少服务器负担。本文将为你详解缓存的使用,帮助你优化前端性能,为用户呈现更快速、流畅的…

EndNote 21 for Mac(文献管理软件) v21.0.1中文版

EndNoter mac是一款参考文献管理软件,旨在帮助学术研究者、学生和专业人士有效地管理和引用参考文献。该软件提供了许多功能,使用户可以轻松地组织、搜索和引用各种类型的文献。 EndNoter mac软件特点和功能 1. 参考文献管理:EndNoter允许用…

提高 After Effects 效率的 40 个最佳快捷键

After Effects 是运动图形和视觉效果的强大工具,但它也可能让人不知所措。拥有如此多的特性和功能,很容易让人迷失在软件中。但是,有一种方法可以简化您的工作流程并提高工作效率 - 使用键盘快捷键。 After Effects素材文件巨大、占用电脑内…

探索自动化网页交互的魔力:学习 Selenium 之旅【超详细】

"在当今数字化的世界中,网页自动化已经成为了不可或缺的技能。想象一下,您可以通过编写代码,让浏览器自动执行各种操作,从点击按钮到填写表单,从网页抓取数据到进行自动化测试。学习 Selenium,这一功能…

Claude 2、ChatGPT、Google Bard优劣势比较

​Claude 2: 优势:Claude 2能够一次性处理多达10万个tokens(约7.5万个单词)。 tokens数量反映了模型可以处理的文本长度和上下文数量。tokens越多,模型理解语义的能力就越强)。它在法律、数学和编码等多个…

一百五十二、Kettle——Kettle9.3.0本地连接Hive3.1.2(踩坑,亲测有效)

一、目的 由于先前使用的kettle8.2版本在Linux上安装后&#xff0c;创建共享资源库点击connect时页面为空&#xff0c;后来采用如下方法&#xff0c;在/opt/install/data-integration/ui/menubar.xul文件里添加如下代码 <menuitem id"file-openZiyuanku" label&…

layui的基本使用-日期控件的业务场景使用入门实战案例一

效果镇楼&#xff1b; 1 前端UI层面&#xff1b; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

TypeScript教程(五)条件语句,循环,函数

一、条件语句 条件语句基于不同的条件来执行不同的动作 1.if语句&#xff1a;只有当指定条件为true时&#xff0c;使用该语句来执行代码 2.if...else语句&#xff1a;当条件为true时执行代码&#xff0c;当条件为else时执行其他代码 3.if...else if...else语句&#xff1a;…

Shell函数调用

定义一个函数&#xff0c;计算所有参数的和&#xff1a; #!/bin/bashfunction getsum(){local sum0for n in $do((sumn))donereturn $sum }getsum 10 20 55 15 #调用函数并传递参数 echo $?运行结果&#xff1a; 100

spss--数据分析Log-Binonial模型

在横断面研究中&#xff0c;Log-binomial 模型能够获得研究因素与结局变量的关联强度指标患病率比&#xff08;PR&#xff09;&#xff0c;是一种研究二分类观察结果与多因素之间关系的重要方法&#xff0c;在医学研究等领域中得到了广泛的应用。 采用log-binomial 模型可直接估…

elementUi表单恢复至初始状态并不触发表单验证

elementUi表单恢复至初始状态并不触发表单验证 1.场景再现2.解决方法 1.场景再现 左侧是树形列表&#xff0c;右侧是显示节点的详情&#xff0c;点击按钮应该就是新增一个规则的意思&#xff0c;表单内容是没有改变的&#xff0c;所以就把需要把表单恢复至初始状态并不触发表单…

大语言模型(LLM)与 Jupyter 连接起来了

现在&#xff0c;大语言模型&#xff08;LLM&#xff09;与 Jupyter 连接起来了&#xff01; 这主要归功于一个名叫 Jupyter AI 的项目&#xff0c;它是官方支持的 Project Jupyter 子项目。目前该项目已经完全开源&#xff0c;其连接的模型主要来自 AI21、Anthropic、AWS、Co…

MSP432自主开发笔记6:定时器多通道捕获多条编码器线脉冲数

所用开发板&#xff1a;MSP432P401R 今日在此更新一下编码器测速的定时器捕获写法&#xff0c;之前学习时竟然忘记更新了~~ 本文讲如何用定时器的通道来 捕获编码器的脉冲信号数量&#xff0c;不提供速度路程的计算方式&#xff0c; 文章提供源码&#xff0c;测试工程下载&a…

积木报表集成前端加载js文件404

项目场景&#xff1a; 在集成积木报表和shiro时候&#xff1a; 集成积木报表&#xff0c;shrio&#xff0c;shrio是定义在另一个模块下的&#xff0c;供另一个启动类使用&#xff0c;积木报表集成shrio的时候&#xff0c;需要依赖存放shrio的核心包&#xff0c;该核心包除了存…

android 如何分析应用的内存(十七)——使用MAT查看Android堆

android 如何分析应用的内存&#xff08;十七&#xff09;——使用MAT查看Android堆 前一篇文章&#xff0c;介绍了使用Android profiler中的memory profiler来查看Android的堆情况。 如Android 堆中有哪些对象&#xff0c;这些对象的引用情况是什么样子的。 可是我们依然面临…