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

超越基础:释放 Systemd 的全部潜力【systemd 二】

🎏:你只管努力,剩下的交给时间

🏠 :小破站

超越基础:释放 Systemd 的全部潜力【systemd 二】

  • 前言
  • 第一:系统服务高级管理
    • 高级服务配置:
    • 环境变量设置:
    • 服务单元文件的高级选项:
  • 第二:用户空间与systemd-nspawn
    • systemd-nspawn的应用:
    • systemd-nspawn使用示例:
      • 1. 创建容器:
      • 2. 进入容器:
      • 3. 退出容器:
      • 4. 列出所有容器:
      • 5. 查看容器状态:
      • 6. 停止容器:
  • 第三:系统管理与systemctl
    • 常见的`systemctl`命令用法:
    • 一些建议:
  • 第四:系统配置与systemd配置文件
    • systemd配置文件的结构:
    • 常见的配置项:
      • 实际案例:
  • 第五:实际应用案例(应用重启)
    • 创建service
    • 执行相应的命令

前言

在 Linux 世界中,systemd 是一个非常强大的工具,但它的深度显然超出了日常的基础用法。本文将引导您走进 systemd 的高级领域,揭示其更多的用途和潜力。通过本文文章文章,你将能够以更高效和精密的方式管理和调整 Linux 系统。

第一:系统服务高级管理

systemd提供了许多高级功能,使得系统服务的管理更为灵活和精细。以下是一些高级服务管理的主题,包括高级服务配置、环境变量设置以及一些服务单元文件的高级选项:

高级服务配置:

  1. 资源限制和控制:

    • 使用Limit*选项可以设置服务的资源限制,如内存、文件描述符等。例如,LimitNOFILE限制服务的文件描述符数量。
  2. 安全性设置:

    • systemd提供了一些选项来增强服务的安全性,如ProtectSystemProtectHome,用于限制对系统和用户家目录的访问权限。
  3. 私有临时文件系统:

    • 通过设置PrivateTmp=true,可以为服务创建一个私有的临时文件系统,使得服务无法访问其他服务的临时文件。

环境变量设置:

  1. EnvironmentFile:

    • 使用EnvironmentFile选项可以从文件中加载环境变量。在服务单元文件中添加EnvironmentFile=/path/to/file,文件中包含的变量会在服务启动时被加载。
  2. Environment:

    • 直接在服务单元文件中使用Environment选项可以设置服务的环境变量。例如,Environment=VAR1=value1 VAR2=value2
  3. EnvironmentDirectory:

    • 使用EnvironmentDirectory选项可以指定一个目录,该目录下的所有文件将被加载为环境变量。每个文件应该包含一个环境变量定义。

服务单元文件的高级选项:

  1. ExecReload:

    • ExecReload定义了在服务重新加载时执行的命令。这在需要重新加载配置的服务中很有用。
  2. RestartSec:

    • RestartSec定义了在服务失败后重新启动之前等待的时间。这可以防止服务在短时间内频繁地启动和停止。
  3. Slice:

    • Slice选项允许将服务放置到指定的cgroup切片中,用于更精细地管理服务的资源。
  4. ProtectSystem和ProtectHome:

    • 这两个选项用于增加服务的安全性,限制对系统和用户家目录的访问权限。
  5. CapabilityBoundingSet:

    • 通过设置CapabilityBoundingSet,可以限制服务的权限,防止它获取超出必需权限范围之外的其他能力。
  6. NoNewPrivileges:

    • 当设置为true时,NoNewPrivileges选项禁止服务创建新的用户特权,提高安全性。

通过使用这些高级选项,系统管理员可以更好地定制和控制系统服务的行为。这对于满足特定安全性需求、资源管理和环境配置非常有用。

第二:用户空间与systemd-nspawn

systemd-nspawn是systemd提供的一个容器管理工具,它允许在用户空间中创建和管理轻量级的容器。这些容器提供了一个独立的文件系统和进程空间,使得用户可以在其内运行一个或多个进程。以下是关于systemd-nspawn的概述以及一个简单的使用示例:

systemd-nspawn的应用:

  1. 轻量级容器:

    • systemd-nspawn提供了一种轻量级的容器化解决方案,类似于传统的chroot,但具有更多功能和隔离。
  2. 文件系统隔离:

    • 每个容器都有自己的文件系统,这使得它们可以拥有独立的根目录,并与主机系统和其他容器隔离。
  3. 系统隔离:

    • systemd-nspawn创建的容器具有独立的进程空间,这意味着容器内的进程不会影响主机系统或其他容器。

systemd-nspawn使用示例:

以下是一个简单的示例,演示如何使用systemd-nspawn创建和管理容器:

1. 创建容器:

sudo systemd-nspawn -bD /path/to/container/root
  • -b参数表示在容器内启动一个引导进程。
  • -D参数指定容器的根目录。

2. 进入容器:

sudo machinectl shell root@containername

这将进入容器的shell环境,可以在其中执行命令。

3. 退出容器:

在容器内部的shell环境中,可以使用exit命令退出容器。

4. 列出所有容器:

machinectl list

这将列出当前系统中所有正在运行的容器。

5. 查看容器状态:

machinectl status containername

这将显示有关特定容器的详细信息,包括其进程状态和IP地址。

6. 停止容器:

machinectl poweroff containername

这将关闭并停止指定的容器。

通过这些简单的命令,可以创建、管理和监视systemd-nspawn容器。systemd-nspawn提供了一个简单而灵活的方式,让用户能够在一个独立的运行环境中运行应用程序或进行实验,而不必使用更重量级的虚拟化解决方案。

第三:系统管理与systemctl

systemctl是systemd中用于管理系统服务的命令行工具。它提供了一种统一的方式来查看和控制系统的状态和服务。以下是一些常见的systemctl命令用法,以及一些建议如何更有效地使用它:

常见的systemctl命令用法:

  1. 查看所有单元的状态:

    systemctl status
    

    这将显示系统中所有单元(服务、目标、定时器等)的当前状态。

  2. 查看特定服务的状态:

    systemctl status servicename
    

    这将显示特定服务的详细状态信息,包括是否正在运行、最后一次启动时间等。

  3. 启动服务:

    sudo systemctl start servicename
    

    这将启动指定的服务。

  4. 停止服务:

    sudo systemctl stop servicename
    

    这将停止指定的服务。

  5. 重启服务:

    sudo systemctl restart servicename
    

    这将停止并重新启动指定的服务。

  6. 查看服务的日志:

    journalctl -u servicename
    

    这将显示特定服务的日志,可以用于故障排除和监控服务的运行状态。

  7. 启用服务开机自启:

    sudo systemctl enable servicename
    

    这将设置服务在系统启动时自动启动。

  8. 禁用服务开机自启:

    sudo systemctl disable servicename
    

    这将设置服务在系统启动时不自动启动。

  9. 查看单元的所有依赖关系:

    systemctl list-dependencies servicename
    

    这将列出指定单元(服务、目标等)的所有依赖关系。

一些建议:

  1. 使用systemctl status进行快速查看:
    在日常使用中,使用systemctl status命令可以快速了解系统的运行状态和服务的健康状况。

  2. 结合journalctl进行日志分析:
    结合journalctl命令,可以更详细地分析服务的日志信息,有助于快速定位问题。

  3. 使用systemctl list-units进行全面查看:
    通过systemctl list-units命令可以查看系统中所有活动的单元,这有助于全面了解系统的运行状况。

  4. 合理使用enabledisable
    仅将确实需要在系统启动时运行的服务设置为自动启动,避免不必要的开机启动服务。

  5. 使用别名进行缩写:
    例如,sudo systemctl restart可以简写为sudo systemctl restart,这有助于提高命令输入的效率。

  6. 定期检查服务状态:
    定期使用systemctl status检查关键服务的状态,以及时发现和解决潜在的问题。

通过充分利用systemctl命令,系统管理员可以更轻松地管理和监控系统服务,确保它们在期望的状态下运行。

第四:系统配置与systemd配置文件

systemd的配置文件采用INI文件格式,通常存储在/etc/systemd/目录下。以下是一些常见的systemd配置文件和配置项,以及一个实际案例来演示如何修改系统行为。

systemd配置文件的结构:

  1. 服务单元文件:

    • 服务单元文件的扩展名为.service,通常存储在/etc/systemd/system/目录下。

    • 典型的服务单元文件结构:

      [Unit]
      Description=My Service[Service]
      ExecStart=/path/to/executable
      
  2. 定时器单元文件:

    • 定时器单元文件的扩展名为.timer,通常存储在/etc/systemd/system/目录下。

    • 典型的定时器单元文件结构:

      [Unit]
      Description=My Timer[Timer]
      OnCalendar=daily
      Persistent=true
      
  3. 系统目标文件:

    • 系统目标文件的扩展名为.target,通常存储在/etc/systemd/system/目录下。

    • 典型的系统目标文件结构:

      [Unit]
      Description=My Target[Install]
      WantedBy=multi-user.target
      

常见的配置项:

  1. Description

    • 用于提供对单元(服务、定时器、目标等)的简要描述。
  2. ExecStart

    • 用于指定服务启动时执行的命令。
  3. OnCalendar

    • 用于指定定时器何时触发的时间规则。
  4. WantedBy

    • 用于指定一个目标单元的名称,表示单元应该由哪个目标单元所依赖。
  5. Requires

    • 用于指定服务单元依赖的其他单元。

实际案例:

假设有一个服务单元文件 /etc/systemd/system/myapp.service,它描述了一个简单的服务:

[Unit]
Description=My Application[Service]
ExecStart=/path/to/myapp

如果要修改该服务的行为,可以考虑以下场景:

  • 场景:修改服务的运行参数

    [Service] 部分添加 ExecStart 行:

    [Service]
    ExecStart=/path/to/myapp --my-argument=value
    
  • 场景:增加服务的依赖

    [Unit] 部分添加 Requires 行:

    [Unit]
    Description=My Application
    Requires=mydependency.service[Service]
    ExecStart=/path/to/myapp
    
  • 场景:修改服务的描述信息

    修改 [Unit] 部分的 Description 行:

    [Unit]
    Description=Updated Description for My Application[Service]
    ExecStart=/path/to/myapp
    

修改配置后,使用以下命令重新加载systemd配置:

sudo systemctl daemon-reload

然后可以使用 sudo systemctl restart myapp.service 来使更改生效。

通过理解systemd配置文件的结构和常见配置项,以及实际案例的修改方式,系统管理员可以更灵活地配置和管理系统服务。

第五:实际应用案例(应用重启)

创建service

1️⃣:cd /etc/systemd/system/,进入到这个目录下,创建一个service文件,如下

[Unit]
Description=My Python Script[Service]
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/bin/python3 /home/csdn/curl_csdn.py[Install]
WantedBy=multi-user.target
  1. Type=simple 指定服务的类型为简单。这表示 systemd 仅等待服务的启动完成,而不会跟踪服务的子进程。对于简单的服务,systemd 会通过监测主进程的状态来确定服务是否正在运行。
  2. Restart=always 这个配置项指示 systemd 在服务终止时始终尝试重新启动。无论是由于正常退出还是发生错误,systemd 都会尝试重新启动服务。
  3. RestartSec=5 指定在尝试重新启动服务之前等待的时间(以秒为单位)。在这个例子中,等待 5 秒后尝试重新启动服务。

systemd 服务单元文件中的 [Install] 部分用于定义服务的安装信息,包括服务启动时的目标(target)。

具体来说:

  • WantedBy=multi-user.target 这个指令表示服务希望被添加到 multi-user.target,这是一个多用户环境的基本目标。multi-user.target 是 Linux 系统中启动到多用户环境的主要目标。当你使用 systemctl enable 启用服务时,systemd 将为服务创建符号链接,使其在系统启动时自动启动到 multi-user.target

这就意味着,通过 sudo systemctl enable my_python_script 命令,你可以使你的服务在系统启动时自动启动到多用户环境。

如果你希望服务在其他目标下启动,你可以更改 WantedBy 指令的值,例如 graphical.target(图形界面目标)等,具体取决于你的需求。

执行相应的命令

# 重新加载 systemd 配置,以使新的服务单元文件生效
systemctl daemon-reload
# 启动服务
systemctl start 你所创建的service文件名,不加.service

相关文章:

超越基础:释放 Systemd 的全部潜力【systemd 二】

🎏:你只管努力,剩下的交给时间 🏠 :小破站 超越基础:释放 Systemd 的全部潜力【systemd 二】 前言第一:系统服务高级管理高级服务配置:环境变量设置:服务单元文件的高级选…...

Flask学习二:项目拆分、请求与响应、cookie

教程 教程地址: 千锋教育Flask2框架从入门到精通,Python全栈开发必备教程 老师讲的很好,可以看一下。 项目拆分 项目结构 在项目根目录下,创建一个App目录,这是项目下的一个应用,应该类似于后端的微服…...

6、Qt延时的使用

一、sleep() 1、说明 QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线…...

《Effective C++》条款26

尽可能延后变量定义式的出现时间 string test(const string& passwd) {string s;if (s.size() < MinLenth){throw logic_error("passwd is too short");} } 这段代码的问题是&#xff1a;如果抛出了异常&#xff0c;那么定义的string对象将面临毫无意义的构造…...

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中&#xff0c;采样是通过以下方式完成的&#xff1a; samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里&#xff0c;np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…...

1 时间序列模型入门: LSTM

0 前言 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种用于处理序列数据的神经网络。相比一般的神经网络来说&#xff0c;他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义&#xff0c;RNN就能够很好…...

1-Python与设计模式--单例模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

Rust之构建命令行程序(一):接受命令行参数

开发环境 Windows 10Rust 1.73.0 VS Code 1.84.2 项目工程 这次创建了新的工程minigrep. IO工程&#xff1a;构建命令行程序 这一章回顾了到目前为止你所学的许多技能&#xff0c;并探索了一些更标准的库特性。我们将构建一个与文件和命令行输入/输出交互的命令行工具&#…...

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…...

《C++PrimerPlus》第9章 内存模型和名称空间

9.1 单独编译 Visual Studio中新建头文件和源代码 通过解决方案资源管理器&#xff0c;如图所示&#xff1a; 分成三部分的程序&#xff08;直角坐标转换为极坐标&#xff09; 头文件coordin.h #ifndef __COORDIN_H__ // 如果没有被定义过 #define __COORDIN_H__struct pola…...

uniapp上架app store详细攻略

目录 uniapp上架app store详细攻略 前言 一、登录苹果开发者网站 二、创建好APP 前言 uniapp开发多端应用&#xff0c;打包ios应用后&#xff0c;会生成一个ipa后缀的文件。这个文件无法直接安装在iphone上&#xff0c;需要将这个ipa文件上架app store后&#xff0c;才能通…...

面试:线上问题处理

文章目录 在处理线上问题时&#xff0c;你的排查思路和步骤是什么线上偶发性问题如何处理和跟踪当系统出现大量错误日志时&#xff0c;你会如何分析和解决问题在高并发场景中&#xff0c;如何排查和解决线程安全问题当系统出现大规模的故障时&#xff0c;你的应急处理和恢复策略…...

Vue3中快速Diff算法

在Vue3中&#xff0c;快速Diff算法主要用于优化虚拟DOM的更新过程&#xff0c;减少不必要的DOM操作&#xff0c;提高性能。以下是对Vue3源码中快速Diff算法的解读&#xff1a; 首先&#xff0c;我们需要引入Vue3的相关包&#xff1a; import { reactive, toRefs, watch } fro…...

ROS2+STM32小车红外对射光电计数器模块资料

数据&#xff1a;一个周长内有20个孔洞或者20个分隔。外径&#xff1a;6.8cm 图片不是实物图&#xff0c;是示意图 因为没有串口&#xff0c;所以不可能会发送出数字的&#xff0c;就是通过电压变化次数来计算距离或者其他数据 有遮挡时&#xff0c;输出高电平&#xff0c;无遮…...

Android设计模式--桥接模式

闻正言&#xff0c;行正道&#xff0c;左右前后皆正人 一&#xff0c;定义 将抽象部分与实现部分分离&#xff0c;使它们都可以独立地进行变化 二&#xff0c;使用场景 从模式的定义中&#xff0c;我们大致可以了解到&#xff0c;这里的桥接的作用其实就是连接抽象部分与实现…...

1、分布式锁实现原理与最佳实践(一)

在单体的应用开发场景中涉及并发同步时&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题&…...

Autosar通信实战系列03-NM模块要点及其配置介绍

本文框架 前言1. NM模块要点介绍1.1 NM基本功能介绍1.2 NM协同功能介绍2. NM配置2.1 NmGlobalConfig配置2.2 NmChannelConfigs配置前言 在本系列笔者将结合工作中对通信实战部分的应用经验进一步介绍常用,包括但不限于通信各模块的开发教程,代码逻辑分析,调测试方法及典型问…...

Golang模块管理功能

文章目录 1. Golang 包管理1.1 GOPATH 包管理1.2 Go vendor 包管理1.3 Go modules包管理2. Go Modules 应用实践2.1 Go modules关键信息2.1.1 go mod 命令行2.1.2 配置代理服务2.2 创建项目2.3 获取依赖包2.4 运行项目1. Golang 包管理 1.1 GOPATH 包管理 第一阶段: Golang初…...

从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;文本数据预处理 从零构建属于自己的GPT系列2&#xff1a;语…...

scipy 笔记:scipy.spatial.distance

1 pdist 计算n维空间中观测点之间的成对距离。 scipy.spatial.distance.pdist(X, metriceuclidean, *, outNone, **kwargs) 1.1 主要参数 X一个m行n列的数组&#xff0c;表示n维空间中的m个原始观测点metric使用的距离度量out输出数组。如果非空&#xff0c;压缩的距离矩阵…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...