超越基础:释放 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提供了许多高级功能,使得系统服务的管理更为灵活和精细。以下是一些高级服务管理的主题,包括高级服务配置、环境变量设置以及一些服务单元文件的高级选项:
高级服务配置:
-
资源限制和控制:
- 使用
Limit*选项可以设置服务的资源限制,如内存、文件描述符等。例如,LimitNOFILE限制服务的文件描述符数量。
- 使用
-
安全性设置:
- systemd提供了一些选项来增强服务的安全性,如
ProtectSystem和ProtectHome,用于限制对系统和用户家目录的访问权限。
- systemd提供了一些选项来增强服务的安全性,如
-
私有临时文件系统:
- 通过设置
PrivateTmp=true,可以为服务创建一个私有的临时文件系统,使得服务无法访问其他服务的临时文件。
- 通过设置
环境变量设置:
-
EnvironmentFile:
- 使用
EnvironmentFile选项可以从文件中加载环境变量。在服务单元文件中添加EnvironmentFile=/path/to/file,文件中包含的变量会在服务启动时被加载。
- 使用
-
Environment:
- 直接在服务单元文件中使用
Environment选项可以设置服务的环境变量。例如,Environment=VAR1=value1 VAR2=value2。
- 直接在服务单元文件中使用
-
EnvironmentDirectory:
- 使用
EnvironmentDirectory选项可以指定一个目录,该目录下的所有文件将被加载为环境变量。每个文件应该包含一个环境变量定义。
- 使用
服务单元文件的高级选项:
-
ExecReload:
ExecReload定义了在服务重新加载时执行的命令。这在需要重新加载配置的服务中很有用。
-
RestartSec:
RestartSec定义了在服务失败后重新启动之前等待的时间。这可以防止服务在短时间内频繁地启动和停止。
-
Slice:
Slice选项允许将服务放置到指定的cgroup切片中,用于更精细地管理服务的资源。
-
ProtectSystem和ProtectHome:
- 这两个选项用于增加服务的安全性,限制对系统和用户家目录的访问权限。
-
CapabilityBoundingSet:
- 通过设置
CapabilityBoundingSet,可以限制服务的权限,防止它获取超出必需权限范围之外的其他能力。
- 通过设置
-
NoNewPrivileges:
- 当设置为
true时,NoNewPrivileges选项禁止服务创建新的用户特权,提高安全性。
- 当设置为
通过使用这些高级选项,系统管理员可以更好地定制和控制系统服务的行为。这对于满足特定安全性需求、资源管理和环境配置非常有用。
第二:用户空间与systemd-nspawn
systemd-nspawn是systemd提供的一个容器管理工具,它允许在用户空间中创建和管理轻量级的容器。这些容器提供了一个独立的文件系统和进程空间,使得用户可以在其内运行一个或多个进程。以下是关于systemd-nspawn的概述以及一个简单的使用示例:
systemd-nspawn的应用:
-
轻量级容器:
- systemd-nspawn提供了一种轻量级的容器化解决方案,类似于传统的chroot,但具有更多功能和隔离。
-
文件系统隔离:
- 每个容器都有自己的文件系统,这使得它们可以拥有独立的根目录,并与主机系统和其他容器隔离。
-
系统隔离:
- 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命令用法:
-
查看所有单元的状态:
systemctl status这将显示系统中所有单元(服务、目标、定时器等)的当前状态。
-
查看特定服务的状态:
systemctl status servicename这将显示特定服务的详细状态信息,包括是否正在运行、最后一次启动时间等。
-
启动服务:
sudo systemctl start servicename这将启动指定的服务。
-
停止服务:
sudo systemctl stop servicename这将停止指定的服务。
-
重启服务:
sudo systemctl restart servicename这将停止并重新启动指定的服务。
-
查看服务的日志:
journalctl -u servicename这将显示特定服务的日志,可以用于故障排除和监控服务的运行状态。
-
启用服务开机自启:
sudo systemctl enable servicename这将设置服务在系统启动时自动启动。
-
禁用服务开机自启:
sudo systemctl disable servicename这将设置服务在系统启动时不自动启动。
-
查看单元的所有依赖关系:
systemctl list-dependencies servicename这将列出指定单元(服务、目标等)的所有依赖关系。
一些建议:
-
使用
systemctl status进行快速查看:
在日常使用中,使用systemctl status命令可以快速了解系统的运行状态和服务的健康状况。 -
结合
journalctl进行日志分析:
结合journalctl命令,可以更详细地分析服务的日志信息,有助于快速定位问题。 -
使用
systemctl list-units进行全面查看:
通过systemctl list-units命令可以查看系统中所有活动的单元,这有助于全面了解系统的运行状况。 -
合理使用
enable和disable:
仅将确实需要在系统启动时运行的服务设置为自动启动,避免不必要的开机启动服务。 -
使用别名进行缩写:
例如,sudo systemctl restart可以简写为sudo systemctl restart,这有助于提高命令输入的效率。 -
定期检查服务状态:
定期使用systemctl status检查关键服务的状态,以及时发现和解决潜在的问题。
通过充分利用systemctl命令,系统管理员可以更轻松地管理和监控系统服务,确保它们在期望的状态下运行。
第四:系统配置与systemd配置文件
systemd的配置文件采用INI文件格式,通常存储在/etc/systemd/目录下。以下是一些常见的systemd配置文件和配置项,以及一个实际案例来演示如何修改系统行为。
systemd配置文件的结构:
-
服务单元文件:
-
服务单元文件的扩展名为
.service,通常存储在/etc/systemd/system/目录下。 -
典型的服务单元文件结构:
[Unit] Description=My Service[Service] ExecStart=/path/to/executable
-
-
定时器单元文件:
-
定时器单元文件的扩展名为
.timer,通常存储在/etc/systemd/system/目录下。 -
典型的定时器单元文件结构:
[Unit] Description=My Timer[Timer] OnCalendar=daily Persistent=true
-
-
系统目标文件:
-
系统目标文件的扩展名为
.target,通常存储在/etc/systemd/system/目录下。 -
典型的系统目标文件结构:
[Unit] Description=My Target[Install] WantedBy=multi-user.target
-
常见的配置项:
-
Description:- 用于提供对单元(服务、定时器、目标等)的简要描述。
-
ExecStart:- 用于指定服务启动时执行的命令。
-
OnCalendar:- 用于指定定时器何时触发的时间规则。
-
WantedBy:- 用于指定一个目标单元的名称,表示单元应该由哪个目标单元所依赖。
-
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
Type=simple: 指定服务的类型为简单。这表示systemd仅等待服务的启动完成,而不会跟踪服务的子进程。对于简单的服务,systemd会通过监测主进程的状态来确定服务是否正在运行。Restart=always: 这个配置项指示systemd在服务终止时始终尝试重新启动。无论是由于正常退出还是发生错误,systemd都会尝试重新启动服务。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");} } 这段代码的问题是:如果抛出了异常,那么定义的string对象将面临毫无意义的构造…...
np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?
在代码中,采样是通过以下方式完成的: samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里,np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…...
1 时间序列模型入门: LSTM
0 前言 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好…...
1-Python与设计模式--单例模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
Rust之构建命令行程序(一):接受命令行参数
开发环境 Windows 10Rust 1.73.0 VS Code 1.84.2 项目工程 这次创建了新的工程minigrep. IO工程:构建命令行程序 这一章回顾了到目前为止你所学的许多技能,并探索了一些更标准的库特性。我们将构建一个与文件和命令行输入/输出交互的命令行工具&#…...
Go 谈论了解Go语言
一、引言 Go的历史回顾 Go语言(通常被称为Go或Golang)由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计,并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作,拥有丰富的编程语言和操作系统研究经验。Go的诞生…...
《C++PrimerPlus》第9章 内存模型和名称空间
9.1 单独编译 Visual Studio中新建头文件和源代码 通过解决方案资源管理器,如图所示: 分成三部分的程序(直角坐标转换为极坐标) 头文件coordin.h #ifndef __COORDIN_H__ // 如果没有被定义过 #define __COORDIN_H__struct pola…...
uniapp上架app store详细攻略
目录 uniapp上架app store详细攻略 前言 一、登录苹果开发者网站 二、创建好APP 前言 uniapp开发多端应用,打包ios应用后,会生成一个ipa后缀的文件。这个文件无法直接安装在iphone上,需要将这个ipa文件上架app store后,才能通…...
面试:线上问题处理
文章目录 在处理线上问题时,你的排查思路和步骤是什么线上偶发性问题如何处理和跟踪当系统出现大量错误日志时,你会如何分析和解决问题在高并发场景中,如何排查和解决线程安全问题当系统出现大规模的故障时,你的应急处理和恢复策略…...
Vue3中快速Diff算法
在Vue3中,快速Diff算法主要用于优化虚拟DOM的更新过程,减少不必要的DOM操作,提高性能。以下是对Vue3源码中快速Diff算法的解读: 首先,我们需要引入Vue3的相关包: import { reactive, toRefs, watch } fro…...
ROS2+STM32小车红外对射光电计数器模块资料
数据:一个周长内有20个孔洞或者20个分隔。外径:6.8cm 图片不是实物图,是示意图 因为没有串口,所以不可能会发送出数字的,就是通过电压变化次数来计算距离或者其他数据 有遮挡时,输出高电平,无遮…...
Android设计模式--桥接模式
闻正言,行正道,左右前后皆正人 一,定义 将抽象部分与实现部分分离,使它们都可以独立地进行变化 二,使用场景 从模式的定义中,我们大致可以了解到,这里的桥接的作用其实就是连接抽象部分与实现…...
1、分布式锁实现原理与最佳实践(一)
在单体的应用开发场景中涉及并发同步时,大家往往采用Synchronized(同步)或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题&…...
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、逐行代码解读
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:文本数据预处理 从零构建属于自己的GPT系列2:语…...
scipy 笔记:scipy.spatial.distance
1 pdist 计算n维空间中观测点之间的成对距离。 scipy.spatial.distance.pdist(X, metriceuclidean, *, outNone, **kwargs) 1.1 主要参数 X一个m行n列的数组,表示n维空间中的m个原始观测点metric使用的距离度量out输出数组。如果非空,压缩的距离矩阵…...
《B3845 [GESP样题 二级] 勾股数》
题目背景 对应的选择、判断题:https://ti.luogu.com.cn/problemset/1102 题目描述 勾股数是很有趣的数学概念。如果三个正整数 a,b,c,满足 a2b2c2,而且 1≤a≤b≤c,我们就将 a,b,c 组成的三元组 (a,b,c) 称为勾股数。你能通过编…...
PWM技术原理与工程实践全解析
1. PWM技术基础解析脉冲宽度调制(PWM)作为现代电子电力控制的核心技术,其本质是通过调节脉冲信号的导通时间比例来实现对功率的有效控制。我第一次接触这个概念是在调试直流电机调速项目时,当时被其精妙的设计思想所震撼。1.1 关键…...
ESP32 ILI9341高性能驱动:64字节DMA突发传输优化
1. 项目概述ILI9341_ESP32 是一款专为 ESP32 平台深度优化的 ILI9341 TFT LCD 显示驱动库。其核心设计目标并非简单实现显示功能,而是在硬件能力边界内榨取极致帧率与响应性能。该库直面 ESP32 的 SPI 总线特性——支持 64 字节一次性突发传输(burst tra…...
Modbus协议详解:从原理到工业应用实践
1. Modbus协议概述Modbus是一种应用层报文传输协议,由Modicon公司(现为施耐德电气旗下品牌)于1979年开发。作为工业自动化领域最广泛采用的通信协议之一,它定义了控制器设备之间交换信息的通用语言。关键特性:协议标准…...
实战指南:运用快马平台与mcp协议构建企业级智能数据分析系统
今天想和大家分享一个最近用InsCode(快马)平台实现的实战项目——基于MCP协议的企业级智能数据分析系统。这个项目特别适合需要整合多源数据的企业场景,整个过程让我深刻体会到MCP协议在复杂系统中的桥梁作用,以及快马平台如何让这类应用的开发部署变得异…...
管理员命令提示符 命令提示符 cmd
命令提示符区别...
2026年硕士论文降AIGC率必备工具:4款实测效果对比
试了四五款工具,最后留下来的就这几个。先说结论:降AIGC率这个需求,嘎嘎降AI(www.aigcleaner.com)是目前性价比最高的选择,4.8元/千字,达标率99.26%。 如果对价格不敏感、对知网特别严格&#…...
**雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现**在物联网(IoT)飞速发展的今天,传统云
雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现 在物联网(IoT)飞速发展的今天,传统云计算模式已难以满足低延迟、高带宽和实时响应的需求。**雾计算(Fog Computing)**作为云与终端设备之间的…...
Go Context 取消信号传播机制剖析
Go Context 取消信号传播机制剖析 在并发编程中,如何优雅地控制协程的生命周期是一个关键问题。Go语言通过Context机制提供了一种统一的取消信号传播方式,使得跨协程、跨层级的任务取消变得简单高效。本文将深入剖析Context的取消信号传播机制ÿ…...
3步实现HTML到Word的智能转换:html-to-docx技术深度解析
3步实现HTML到Word的智能转换:html-to-docx技术深度解析 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 你是否曾遇到过这样的场景?精心设计的网页报告需要转换为Word文档进行…...
