0

0

Linux systemd 的核心设计思想

冷炫風刃

冷炫風刃

发布时间:2026-01-23 19:38:03

|

557人浏览过

|

来源于php中文网

原创

systemd 的核心是声明式依赖建模而非脚本顺序执行:用 After 和 Wants 表达服务间语义依赖,由 systemd 自动调度并行启动;Type= 必须匹配进程模型(如 nginx 用 forking);自定义单元文件须置于 /etc/systemd/system/ 并 daemon-reload。

linux systemd 的核心设计思想

并行启动、依赖驱动、单元抽象——这是 systemd 区别于 SysV init 的根本所在,不是“更高级的脚本”,而是声明式系统建模。

为什么必须用 AfterWants 而不是写启动顺序脚本

传统 SysV init 靠 S01xxxS02xxx 这类命名强制串行,一卡全停;systemd 则把“服务 A 要在网络就绪后运行”这种语义直接写进配置,由 systemd 自动解析依赖图(DAG),找出所有无依赖的服务并行拉起。比如 nginx.service 设了 After=network.targetWants=network.target,systemd 就不会等 sshd 启完才启 nginx,只要 network.target active,它就可能和 mysql.service 一起启动。

  • After 只控制顺序,不保证依赖存在;Wants 才真正触发依赖单元的启动(但失败不影响本单元)
  • 误用 Requires=network.target 可能导致网络稍慢时 nginx 直接启动失败——多数场景用 Wants 更健壮
  • 依赖写错会导致 systemctl start 卡住或报 Job for xxx.service failed. See 'journalctl -xe' for details.

.service 文件里 Type= 值选错,服务就“假死”

systemd 靠 Type= 判断进程生命周期。Nginx 默认是 forking(主进程 fork 子进程后退出),如果你写成 Type=simple,systemd 会把 fork 后退出的主进程当“已结束”,立刻标记服务为 inactive,实际 worker 还在跑——结果 systemctl status 显示 inactive,ps aux | grep nginx 却能看到一堆进程。

WOBIZ电子商务2.0程序
WOBIZ电子商务2.0程序

WO@BIZ电子商务2.0软件是窝窝团队基于对互联网发展和业务深入研究后,采用互联网2.0的思想设计、开发的电子商务和社会化网络(SNS)结合的解决方案产品。WOBIZ是互联网2.0创业、传统网站转型、中小企业宣传产品网应用的最佳选择。 它精心设计的架构、强大的功能机制、友好的用户体验和灵活的管理系统,适合从个人到企业各方面应用的要求,为您提供一个安全、稳定、高效、 易用而快捷的电子商务2.0网络

下载
  • Type=simple:主进程即服务进程(如 node.js 服务)
  • Type=forking:主进程 fork 后退出,需配 PIDFile=(如 nginx、redis-server)
  • Type=oneshot:执行完命令就退出,常用于初始化脚本,要加 RemainAfterExit=yes 才算 active

自定义服务一定要放对路径:/etc/systemd/system/ 不是可选项

你写好 myapp.service,扔进 /usr/lib/systemd/system/?不行。这个目录归包管理器管,升级时可能被覆盖。所有手动创建或覆盖的单元文件,必须放在 /etc/systemd/system/ ——这里优先级最高,systemd 会优先读取它。

  • 写完记得运行 systemctl daemon-reload,否则 systemctl enable 会报 Failed to enable unit: Unit myapp.service does not exist.
  • 启用服务用 systemctl enable myapp.service,本质是在 /etc/systemd/system/multi-user.target.wants/ 下建软链接
  • 禁用服务不是删文件,而是 systemctl disable myapp.service,否则下次 daemon-reload 还会生效

真正难的从来不是写对一行 ExecStart,而是理解 systemd 把“系统”看作一张依赖关系网,而不是一串命令。一旦依赖写反、Type 选错、路径放错,它不会报错,只会静默表现异常——查日志得看 journalctl -u myapp.service -n 50,而不是只盯 systemctl status 那两行绿色文字。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

665

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

247

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

515

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

255

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

531

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

600

2023.08.14

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号