systemd、upstart和system V

本文介绍了Linux系统中三种主要的初始化系统:systemd、upstart和System V。systemd旨在提供更高效的服务依赖管理,实现服务并行启动,降低了Shell的开销。upstart则是一个基于事件的系统,启动服务更快。RHEL6使用Upstart替换System V,而Fedora使用systemd,不再支持runlevel概念。文章还探讨了这些系统的区别和相关配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 systemd是Linux下的一种init软件,由Lennart Poettering(英语:Lennart Poettering)带头开发并在LGPL 2.1及后续版本许可证下开源发布。其开发目标是提供更优秀的框架以表示系统服务(英语:Service (systems architecture))间的依赖关系,并以此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销(英语:Computational overhead)的效果,最终代替现在常用的System V与BSD风格init程序。systemd 是 Linux 下一个与 SysV 和 LSB 初始化脚本兼容的系统和服务管理器。systemd 使用 socket 和 D-Bus 来开启服务,提供基于守护进程的按需启动策略,保留了 Linux cgroups 的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系的一个更为精细的逻辑控制,拥有前卫的并行性能。systemd 无需经过任何修改便可以替代 sysvinit 。systemd已纳入众多Linux发行版的软件源中,Fedora 15及后续版本都采用的systemd作为Linux下的默认init程序。(在 Fedora 14 的特性中,systemd 是作为一个技术预览。在 Fedora 15 中替代 Upstart 作为默认管理器,具体可参见fedora官方文档说明点击打开链接 )


SysVinit守护进程(sysvinit软件包)是一个基于运行级别的系统,它使用运行级别(单用户、多用户以及其他更多级别)和链接(位于/etc /rc?.d目录中,分别链接到/etc/init.d中的init脚本)来启动和关闭系统服务。Upstart init守护进程(upstart软件包)则是基于事件的系统,它使用事件来启动和关闭系统服务。


以下是两种服务管理的却别和对应的命令.

任务指令新指令
使某服务自动启动chkconfig –level 3 sshd onsystemctl enable sshd.service
使某服务不自动启动chkconfig –level 3 sshd offsystemctl disable sshd.service
检查服务状态service sshd statussystemctl status sshd.service (服务详细信息) systemctl is-active sshd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig –listsystemctl list-units –type=service
启动某服务service sshd startsystemctl start sshd.service
停止某服务service sshd stopsystemctl stop sshd.service
重启某服务service sshd restartsystemctl restart sshd.service

<表参考自http://www.talaland.com/systemd-service-configuration/>


RHEL6 使用新的Upstart启动服务替换先前的System V init,Upstart是事件驱动型的,因此,它只包含按需启动的脚本,这将使启动过程变得更加迅速。经过良好调优并使用Upstart启动方式的Linux服务器的启动速度要明显快于原有的使用System V init的系统。 RHEL 6对启动过程的改变相对较少,兼容SysV,所以依然可以处理那些在目录/etc/init.d中包含服务脚本的服务,runlevel的概念也是存在于RHEL6中的<fedora因为使用的是systemd,所以基本上runlevel的概念也就不存在了>。


RHEL6下的相关改变:

/etc/inittab 只用来配置系统默认运行级别,所有先前由/etc/inittab来设定的条目,现在都在/etc/init/目录中以单个文件的形式存在。
/etc/init/rcS.conf 通过启动大部分的基本服务来对系统进行初始化的设定
/etc/init/rc.conf 对启动各自的运行级别(runlevel)的设定
/etc/init/control-alt-delete.conf 定义当用户按“control-alt-delete”三个键时的系统行为
/etc/init/tty.conf、/etc/init/serial.conf 定义系统处理终端登录
/etc/sysconfig/init 中ACTIVE_CONSOLES决定了虚拟控制台的创建,AUTOSWAP是否自动检测交换分区,单用户模式下的root使用的SHELL,默认为/sbin/sushell,另外/sbin/sulogin会在单用户模式启动之前弹出登录提示。





`/etc/systemd/system/` 目录是 Linux 系统中 systemd 初始化系统服务管理器的一个重要组成部分。Systemd 是现代 Linux 发行版广泛采用的一种系统服务管理工具,它替代了传统的 SysV init Upstart。通过 `/etc/systemd/system/` 目录及其子目录,管理员可以自定义管理系统服务、定时任务以及其他类型的单元文件(unit files)。 ### 单元文件类型 在该目录下存放的主要是一些单元文件,它们描述了如何启动、停止以及控制系统中的各种组件。常见的几种单元文件包括: - **Service Units (.service)**:最常用的单元之一,用来定义后台运行的服务程序,如 Web 服务器、数据库等。 - **Socket Units (.socket)**:用于网络监听套接字或其他类型的 IPC (进程间通信),以便按需激活相应的服务。 - **Target Units (.target)**:类似于传统 init 的“运行级别”,将一组相关的服务捆绑在一起作为一个整体进行管理依赖解析。 - **Timer Units (.timer)**:类似于 cron 定时任务的功能,但更强大且与 systemctl 更加集成。 - **Path Units (.path)**:当监控的路径发生变化时触发相应操作。 - **Swap Units (.swap)**:配置交换分区或文件的行为。 - **Device Units (.device)**:关联硬件设备节点到 udev 规则。 - **Mount Units (.mount)**:处理挂载点的相关信息,例如自动挂载 NFS 或 CIFS 文件系统。 - **Automount Units (.automount)**:提供延迟加载功能,只有访问指定位置时才会真正去尝试挂载对应的卷。 ### 使用场景举例 假设你需要添加一个新的 MySQL 数据库作为开机自启服务,则可以在 `/etc/systemd/system/mysql.service.d/override.conf` 创建一个配置片段文件来调整默认行为,或者完全新建一个 `.service` 文件放置在此处来进行个性化定制。 对于一次性任务或是临时性的守护进程,也可以直接在这里编写简单的脚本形式的服务单元文件。 另外值得注意的是,在这个主目录下面还会有几个特别重要的子目录: - **multi-user.target.wants/**:包含链接指向那些应该随着进入 multi-user 模式一起启动的服务。 - **graphical.target.wants/**:同理适用于图形界面环境下的目标状态。 - **default.target**:指示系统的默认启动目标。 最后别忘了每次修改完相关文件后都需要刷新 systemd 缓存使其识别新改动: ```bash sudo systemctl daemon-reload ``` 这一步非常重要,因为如果没有更新缓存,那么所做的更改就不会生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值