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

systemd 与 SysVinit

1. 什么是 systemdSysVinit

systemdSysVinit 都是 Linux 的初始化系统(init system),用于管理系统启动、服务、进程和日志。

比较项SysVinitsystemd
启动方式逐步启动(串行)并行启动(并行)
服务管理基于 init 脚本基于 unit 文件
依赖管理依赖手动定义自动处理依赖关系
启动速度快(并行优化)
日志管理/var/log/messagesjournalctl
是否支持 cgroups
默认用于旧版 Linux(CentOS 6、Ubuntu 14)现代 Linux(CentOS 7+、Ubuntu 16+)

2. SysVinit 详解

SysVinit(System V init)是早期 Unix 系统的 init 进程,负责系统引导和服务管理。

(1) SysVinit 的工作方式

  • 读取 /etc/inittab 确定 运行级别(Runlevel)
  • /etc/rc.d/ 目录下执行 启动脚本
  • 顺序(串行) 依次启动服务(启动较慢)

(2) SysVinit 运行级别

运行级别作用
0关机
1单用户模式
3纯命令行模式
5图形界面模式
6重新启动
(3) SysVinit 启动服务的方式
  • SysVinit 使用 /etc/init.d/ 脚本 作为服务管理方式:
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
  • 也可以用 service 命令:
service nginx status
service nginx restart
  • chkconfig 用于管理开机自启:
chkconfig nginx on  # 开机自启
chkconfig --list nginx  # 查看是否开机自启
(4) SysVinit 存在的问题
  • 服务启动是串行的,启动速度慢
  • 无法追踪进程状态
  • 日志管理依赖 /var/log/messages,查询不方便
  • 服务依赖关系需要手动处理

3. systemd 详解

systemd 是现代 Linux 的 init 进程,取代 SysVinit,提供更快的启动速度和更强的服务管理能力。

(1) systemd 的特点

并行(Parallel)启动:多个服务同时启动,加快系统引导速度。
自动处理依赖关系:无需手动配置 chkconfig
使用 unit 文件代替 init 脚本:更结构化、更易维护。
内置 journalctl 日志管理:更方便查询日志。
支持 cgroups 进程控制:管理进程生命周期。

(2) systemd 启动服务

  • systemctlsystemd 提供的服务管理工具:
systemctl start nginx   # 启动服务
systemctl stop nginx    # 停止服务
systemctl restart nginx # 重启服务
systemctl status nginx  # 查看服务状态
  • 设置开机自启:
systemctl enable nginx  # 开机启动
systemctl disable nginx # 取消开机启动
  • 列出所有运行的服务
systemctl list-units --type=service

(3) systemd unit 文件

  • systemd 使用 /etc/systemd/system/ 目录下的 .service 文件管理服务,例如:
[Unit]
Description=NGINX Web Server
After=network.target

[Service]
ExecStart=/usr/sbin/nginx -g "daemon off;"
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target
  • systemd 读取 unit 文件后,可以用 systemctl 直接管理服务:
systemctl daemon-reload  # 重新加载配置
systemctl restart nginx  # 重启服务

(4) systemd 日志管理

  • systemd 使用 journalctl 记录所有系统日志:
journalctl -u nginx  # 查看 Nginx 相关日志
journalctl -f        # 实时查看日志(类似 `tail -f`)
journalctl --since "1 hour ago" # 查看最近 1 小时的日志

4. systemdSysVinit 的区别

功能SysVinitsystemd
启动方式串行启动并行启动
管理方式init.d 脚本systemctl
依赖管理手动配置自动处理
启动速度
日志管理/var/log/messagesjournalctl
是否支持 cgroups
重启单个服务service nginx restartsystemctl restart nginx
查看服务状态service nginx statussystemctl status nginx

5. 如何判断系统使用 SysVinit 还是 systemd

方法 1: 检查 /sbin/init

ls -l /sbin/init
  • 如果输出:
    lrwxrwxrwx 1 root root 22 Mar 12  2025 /sbin/init -> /lib/systemd/systemd
    
    说明 使用 systemd
  • 如果 /sbin/init/etc/init.d 目录中的二进制文件,说明使用 SysVinit

方法 2: 检查进程

ps -p 1
  • 如果输出:
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:00 /lib/systemd/systemd
    
    说明 使用 systemd
  • 如果输出:
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:00 /sbin/init
    
    说明 使用 SysVinit

方法 3: 直接运行 systemctl

systemctl --version
  • 如果返回 systemd 版本号(如 systemd 249),说明 使用 systemd
  • 如果 systemctl 命令不存在,说明 使用 SysVinit

6. 哪些 Linux 版本使用 systemd

发行版使用的 init 系统
CentOS 6 及更早版本SysVinit
CentOS 7 及更新版本systemd
Ubuntu 14.04 及更早版本SysVinit
Ubuntu 16.04+systemd
Debian 7 及更早版本SysVinit
Debian 8+systemd

Last

  • SysVinit传统的 Linux 启动管理系统,使用 init.d 脚本,启动慢,依赖手动管理。
  • systemd现代 Linux 的标准 init 系统,支持 并行启动自动管理依赖,大幅提升 启动速度
  • systemctl 取代了 servicechkconfig,提供更强的管理能力。
  • journalctl 替代了传统 /var/log/messages 日志管理。

如果你的系统是 CentOS 7+ 或 Ubuntu 16+,你应该使用 systemd 而不是 SysVinit 🚀

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

相关文章:

  • SmolVLM2: The Smollest Video Model Ever(三)
  • arco-design-vue:给<a-table>组件每一行添加data-id属性,并根据id数组是否包含此行id进行样式处理
  • 使用 Spring Boot 和 Uniapp 搭建 NFC 读取系统
  • 若依框架二次开发——RuoYi-AI 本地部署流程
  • 动态规划基础
  • ISP--Demosaicking
  • 学习51单片机Day02---实验:点亮一个LED灯
  • SpringDoc【使用详解】
  • 解决RecyclerView在调用smoothScrollToPosition后最后一个item底部超出屏幕的问题
  • Word / WPS 页面顶部标题 段前间距 失效 / 不起作用 / 不显示,标题紧贴页眉 问题及解决
  • 数据库主从复制学习笔记
  • Android 中支持旧版 API 的方法(API 30)
  • 深入解析计算机操作系统的底层架构与核心模块功能
  • SQL 查询中使用 IN 导致性能问题的解决方法
  • vue3开发基础流程(前21)
  • 2025年认证杯C题超详细解题思路
  • 基于Flask的勒索病毒应急响应平台架构设计与实践
  • uniApp开发微信小程序-连接蓝牙连接打印机上岸!
  • Java抽象类与抽象方法详解
  • WSA(Windows 安卓子系统)过检测教程
  • ECMAScript 6 新特性(二)
  • 蓝桥杯python组考前准备
  • 代码随想录第14天:(二叉树)
  • CasaOS香橙派安装HomeAssistant智能家居系统并实现远程管理家中智能设备
  • 微服务简述
  • Backtrader从0到1——第一个回测策略
  • Gerapy二次开发:用户管理专栏主页面开发
  • 算法训练之动态规划(二)
  • 深度解析强化学习:原理、算法与实战
  • 【LunarVim】解决which-key 自定义键位注册不成功问题