Systemd 使用指南

1. Systemd 基础概念

什么是 Systemd?

Systemd 是 Linux 系统的现代初始化系统和服务管理器,取代了传统的 SysVinit。它提供:

  • 更快的启动时间

  • 更好的并行处理

  • 高级服务管理功能

  • 依赖关系管理

2. Systemd 核心组件

单元(Units)

Systemd 通过单元管理各种系统资源:

单元类型

文件扩展名

用途

Service

.service

管理系统服务(如 Apache、MySQL)

Socket

.socket

管理网络/IPC 套接字

Target

.target

分组其他单元(类似运行级别)

Timer

.timer

定时任务管理

Mount

.mount

文件系统挂载点

3. 常用 Systemd 命令

服务管理命令

# 启动服务 sudo systemctl start service_name.service # 停止服务 sudo systemctl stop service_name.service # 重启服务 sudo systemctl restart service_name.service # 重新加载配置(不重启) sudo systemctl reload service_name.service # 查看服务状态 sudo systemctl status service_name.service # 启用开机自启 sudo systemctl enable service_name.service # 禁用开机自启 sudo systemctl disable service_name.service # 检查是否启用 sudo systemctl is-enabled service_name.service

系统状态查看

# 列出所有已加载的单元 systemctl list-units # 仅列出服务单元 systemctl list-units --type=service # 查看失败的服务 systemctl --failed # 查看系统启动时间 systemd-analyze time # 分析启动过程各服务耗时 systemd-analyze blame

目标(Target)管理

# 查看当前目标 systemctl get-default # 设置默认目标 sudo systemctl set-default multi-user.target # 切换到救援模式 sudo systemctl isolate rescue.target # 切换到图形界面 sudo systemctl isolate graphical.target # 紧急模式 sudo systemctl emergency

4. 创建自定义 Systemd 服务

基本服务文件结构

创建/etc/systemd/system/my-service.service

[Unit] Description=我的自定义服务描述 Documentation=https://example.com/docs After=network.target Wants=network.target [Service] Type=simple User=myuser Group=mygroup ExecStart=/usr/local/bin/my-service ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=10s StandardOutput=journal StandardError=journal Environment="APP_ENV=production" WorkingDirectory=/var/lib/my-service [Install] WantedBy=multi-user.target

服务类型说明

# Type=simple(默认)- 主进程不会 fork Type=simple # Type=forking - 主进程会 fork 子进程 Type=forking PIDFile=/var/run/my-service.pid # Type=oneshot - 执行一次就退出 Type=oneshot RemainAfterExit=yes # Type=notify - 服务就绪时通知 systemd Type=notify

重启策略配置

# 从不重启 Restart=no # 只在失败时重启 Restart=on-failure # 总是重启(即使正常退出) Restart=always # 除非被手动停止,否则总是重启 Restart=on-abnormal

5. 实际应用示例

示例1:Python 应用服务

[Unit] Description=Python Web 应用 After=network.target mysql.service Requires=mysql.service [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/opt/myapp ExecStart=/usr/bin/python3 app.py ExecReload=/bin/kill -HUP $MAINPID Restart=always RestartSec=5 Environment=PYTHONPATH=/opt/myapp Environment=DATABASE_URL=mysql://user:pass@localhost/db [Install] WantedBy=multi-user.target

示例2:Node.js 应用服务

[Unit] Description=Node.js API 服务器 After=network.target redis.service Wants=redis.service [Service] Type=simple User=nodeapp Group=nodeapp WorkingDirectory=/srv/nodeapp ExecStart=/usr/bin/node index.js ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal Environment=NODE_ENV=production Environment=PORT=3000 # 资源限制 LimitNOFILE=65536 LimitNPROC=4096 [Install] WantedBy=multi-user.target

示例3:Java 应用服务

[Unit] Description=Java 企业应用 After=network.target [Service] Type=simple User=javaapp Group=javaapp WorkingDirectory=/opt/javaapp ExecStart=/usr/bin/java -jar app.jar ExecStop=/bin/kill -TERM $MAINPID Restart=on-failure RestartSec=30 # JVM 参数 Environment=JAVA_OPTS="-Xmx2g -Xms1g -Dspring.profiles.active=prod" # 安全设置 NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ReadWritePaths=/var/lib/javaapp /var/log/javaapp [Install] WantedBy=multi-user.target

6. 高级功能

定时任务(Timer)

创建/etc/systemd/system/backup.timer

[Unit] Description=每日备份任务 Requires=backup.service [Timer] OnCalendar=daily Persistent=true RandomizedDelaySec=300 [Install] WantedBy=timers.target

对应的服务文件/etc/systemd/system/backup.service

[Unit] Description=系统备份服务 [Service] Type=oneshot User=backup ExecStart=/usr/local/bin/backup-script.sh

套接字激活(Socket Activation)

创建/etc/systemd/system/my-service.socket

[Unit] Description=My Service Socket [Socket] ListenStream=8080 Accept=yes [Install] WantedBy=sockets.target

对应的服务文件会自动为每个连接启动实例。

7. 日志管理

使用 Journalctl 查看日志

# 查看特定服务的日志 journalctl -u my-service.service # 实时跟踪日志 journalctl -u my-service.service -f # 查看指定时间范围的日志 journalctl -u my-service.service --since="2025-01-01 00:00:00" --until="2025-01-01 23:59:59" # 查看最近日志(最新100行) journalctl -u my-service.service -n 100 # 按优先级过滤 journalctl -u my-service.service -p err # 查看内核日志 journalctl -k # 查看系统启动日志 journalctl -b

日志轮转配置

创建/etc/systemd/journald.conf.d/custom.conf

[Journal] SystemMaxUse=1G SystemMaxFileSize=100M SystemMaxFiles=10 MaxRetentionSec=1month

8. 故障排除和调试

服务诊断

# 检查服务状态详情 systemctl status my-service.service -l # 查看服务依赖关系 systemctl list-dependencies my-service.service # 验证服务文件语法 systemd-analyze verify /etc/systemd/system/my-service.service # 测试服务启动(不实际启动) systemctl --dry-run start my-service.service

调试模式启动

# 在前台运行服务进行调试 systemctl edit my-service.service

添加:

[Service] Environment=DEBUG=1 StandardOutput=console StandardError=console

9. 安全最佳实践

服务安全加固

[Service] # 使用专用用户 User=service-user Group=service-group # 文件系统保护 ProtectSystem=strict ProtectHome=true ReadWritePaths=/var/lib/myservice NoNewPrivileges=true # 网络安全 PrivateNetwork=false RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 # 资源限制 LimitNOFILE=65536 MemoryMax=512M CPUQuota=80%

创建专用系统用户

# 创建无登录权限的系统用户 sudo useradd -r -s /bin/false -d /var/lib/myapp myapp-user sudo mkdir -p /var/lib/myapp sudo chown myapp-user:myapp-user /var/lib/myapp

10. 实用脚本和工具

服务监控脚本

#!/bin/bash # monitor-service.sh SERVICE_NAME="my-service.service" MAX_RESTARTS=3 CHECK_INTERVAL=30 monitor_service() { local restarts=0 while true; do if ! systemctl is-active --quiet "$SERVICE_NAME"; then echo "$(date): 服务 $SERVICE_NAME 未运行,尝试重启..." systemctl restart "$SERVICE_NAME" ((restarts++)) if [ $restarts -ge $MAX_RESTARTS ]; then echo "$(date): 错误: 服务重启次数超过限制" exit 1 fi else restarts=0 fi sleep $CHECK_INTERVAL done } monitor_service

批量服务管理

#!/bin/bash # manage-services.sh SERVICES=("nginx" "mysql" "redis") case "$1" in start) for service in "${SERVICES[@]}"; do echo "启动 $service..." sudo systemctl start "$service" done ;; stop) for service in "${SERVICES[@]}"; do echo "停止 $service..." sudo systemctl stop "$service" done ;; status) for service in "${SERVICES[@]}"; do echo "=== $service 状态 ===" systemctl status "$service" --no-pager -l echo done ;; *) echo "用法: $0 {start|stop|status}" exit 1 ;; esac

11. 实际部署流程

完整部署示例

# 1. 创建服务文件 sudo nano /etc/systemd/system/myapp.service # 2. 重新加载 systemd 配置 sudo systemctl daemon-reload # 3. 测试服务语法 systemd-analyze verify /etc/systemd/system/myapp.service # 4. 启动服务测试 sudo systemctl start myapp.service # 5. 检查状态和日志 sudo systemctl status myapp.service journalctl -u myapp.service -f # 6. 启用开机自启 sudo systemctl enable myapp.service # 7. 测试重启后是否正常 sudo systemctl reboot

这个全面的 Systemd 使用指南涵盖了从基础概念到高级用法的所有方面,可以帮助您有效地管理系统服务。

参考:Mastering Systemd in Linux: A Comprehensive Guide — linuxvox.com

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

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

相关文章

文档翻译在电力建设中常见的场景应用

唐帕文档翻译在电力建设(尤其是国际项目)中扮演着至关重要的角色,贯穿于项目全生命周期。以下是其常见的场景应用及重要性分析: 一、核心应用场景 1. 项目前期与招投标阶段 可行性研究报告与招标文件: 文档翻译将东道…

2025年新中式女装选购避坑指南与品牌推荐,市场上新中式女装品牌排行榜色麦新中式专注产品质量

新中式女装市场正以年均25%的增速扩容,但行业痛点同样显著:设计同质化、面料掺假、工艺粗糙等问题频发,消费者与加盟商常陷入“高价低质”陷阱。如何在文化表达与商业价值间找到平衡点,成为品牌破局的关键。本文基…

金融产品推广,为何总在左右为难?选对媒体是关键破局点

你是否也有这样的困惑:精心准备的金融产品推广文案,合规上挑不出毛病,内容也足够专业,但一发出去就石沉大海?或者更糟,引来一堆不相干的咨询,真正的目标客户却无动于衷? 问题可能不…

2026主管护师护理学备考攻略与资源选择

前言:在主管护师护理学备考过程中,优质的备考资源是提升备考效率的关键支撑,但面对海量的教材、课程、题库等资源,很多考生陷入“选择困难”或“资源滥用”的误区。其实,备考资源无需追求“多”,而在于“精”和“…

实用指南:12. AOP(记录日志)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

springboot基于Java的外卖管理系统设计开发实现

背景与意义 外卖行业的快速发展促使餐饮企业需要高效的管理系统来应对订单处理、配送调度、用户反馈等复杂需求。传统人工管理方式效率低下,难以满足现代外卖业务的高并发、实时性要求。SpringBoot框架因其简化配置、快速开发的特点,成为构建外卖管理系…

2026主管护师护理学怎么备考,全流程指南稳步通关不跑偏

前言:主管护师护理学考试考点繁杂,多数考生为在职人员,时间碎片化问题突出,易陷入备考盲目、效率低下的困境。想要高效通关,需搭建科学的备考框架,遵循循序渐进的流程,准确匹配备考各阶段需求。本文梳理主管护师…

ai做PPT正确打开方式:选对工具+用对方法,3分钟搞定专业演示

市面上现在也是涌现出太多AIPPT产品,大家往往陷入选择困难,究竟哪款真正适配需求?本文选取了3款AI PPT工具进行讲解。1、AI PPT国内主流的AI演示文稿工具,提供“主题生成、文档导入、PPT美化”三种核心模式,支持标题和…

谷歌发布AI广告与分析顾问:是SEO革命性产品,还是未来可期?

谷歌正在向其广告和分析生态系统中,注入一股前所未有的AI力量。其即将推出两款基于其最新Gemini模型构建的、全新的AI助手——广告顾问和分析顾问。从12月初开始,这两款工具将陆续向所有英语地区的Google Ads和Google Analytics账户开放。谷歌的愿景是&a…

深圳昊客/百度竞价开户推广代运营服务商:推荐排名前5的公司

深圳企业做百度推广,如何选择靠谱的代运营服务商? 在竞争激烈的数字营销环境中,越来越多深圳中小企业开始借助百度竞价(SEM)获取精准客户。但不少企业主发现:广告费花了不少,有效咨询却寥寥无几。问题往往不在平…

git使用--depth参数参数快速拉取分支代码后无法切换到其他分支解决办法

我们经常有被催得比较急的项目,早上到我们手,晚上就要求要的,如果我们本地没有代码那就要克隆一份完整代码过来做需求,但是完整克隆一份好几百G的代码下来是相当耗时的,那么我们有没有一种方法能快速拉取一份代码做客制…

springboot基于java的网吧管理系统设计实现

网吧管理系统设计的背景随着互联网的普及和网络娱乐需求的增长,网吧作为提供上网服务的场所,其管理复杂度日益增加。传统的手工记录和简单的电子表格管理方式已无法满足现代网吧运营的需求。会员管理、设备维护、计费统计等环节需要更高效、自动化的解决…

金华宠物医院优选推荐,2026年宠主好评TOP榜单,猫咪体检/宠物神经外科/宠物眼科/母猫绝育,宠物医生排名前十

随着宠物经济持续升温,宠物医疗行业迎来快速发展期。据《2025年中国宠物行业白皮书》显示,我国宠物医疗市场规模已突破800亿元,年复合增长率达18%,但行业仍存在设备参差不齐、专科细分不足、服务透明度低等痛点。在…

Mysql优化笔记 - 倾听

1. 全文索引 当字段的值存在 A,B,C 时,参数是个集合,要进行多个值匹配时,如果使用 like or 的方式,直接会变成全表扫描,这个时候可以使用 全文索引 a. 添加索引ALTER TABLE table_name ADD FULLTEXT INDEX index_…

springboot基于Java的诊所管理系统设计实现

背景分析 医疗行业信息化需求日益增长,传统纸质记录和手工管理方式效率低下,易出错。诊所作为基层医疗机构,亟需通过数字化系统优化患者管理、药品库存、财务统计等核心业务流程。Java技术栈凭借稳定性、跨平台性及丰富的生态,成…

为应对“差评勒索”,谷歌上月推出的负面评论敲诈举报表单似乎非常有效

在本地商业的数字战场上,谷歌商业资料的评论区,早已成为兵家必争之地。 它被视为用户口碑最真实的映照,是商家信誉的晴雨表。 当然,有利益的地方就会有不为人知的阴暗面。 一种新型的、有组织的恶意行为——负面评论敲诈&#…

2024年提示工程热点:生命周期管理的4个关键进化方向

2024年提示工程热点:生命周期管理的4个关键进化方向 一、引入与连接 引人入胜的开场 想象一下,在科技的浩瀚宇宙中,有一颗闪耀的星星叫做提示工程。它就像是一位神奇的魔法师,能够让计算机理解我们人类的语言,并按照我们的要求完成各种任务。从智能客服与我们流畅对话,…

挑战Sora!以色列独角兽Lightricks发布LTX-2

首个非对称双流架构,1秒极速有声生成!在多模态生成领域, 打破视觉与听觉模态的物理壁垒、实现跨感官信息的有机融合与“感官统一” ,是当前学界与工业界亟待解决的核心挑战。长期以来,有声视频生成(Sounding Vid…

2025年AI超级员工公司综合排名权威发布,AI企业员工/AI智能员工/AI超级员工/AI员工品牌口碑排行

行业格局深度解析 随着人工智能技术在各行业的深入应用,AI超级员工市场呈现出蓬勃发展的态势。据最新行业数据显示,2024年中国AI超级员工市场规模已达百亿级别,预计2025年将实现40%以上的增长。在这一快速发展的赛道…

springboot基于java零售与仓储管理系统的设计与实现

背景分析 零售与仓储管理系统在传统行业中常面临效率低、数据孤岛、人工错误率高的问题。随着电商与新零售的崛起,企业对实时库存管理、供应链协同、数据分析的需求激增。Java技术栈凭借其稳定性、跨平台性及丰富的开源生态(如SpringBoot、MyBatis&…