随着 Fedora 15 的发布,systemd 正式开始了替代 SysVinit 的步伐。通过本文的秘籍表,可助您轻松由 SysVinit 过渡到 systemd 。
该文档目的在于帮助系统管理员了解 systemd 中可以取代原先 sysvinit 工作流程的命令。如果想要了解 systemd 的一般信息,参阅 systemd。
注意 ‘service’ 和 ‘chkconfig’ 命令在 systemd 环境下依然可用,该教程目的在于告诉您如何使用原生 systemctl 替代品。
sysvinit 命令 | systemd 命令 | 备注 |
---|---|---|
service frobozz start | systemctl start frobozz.service | 用来启动一个服务 (并不会重启现有的) |
service frobozz stop | systemctl stop frobozz.service | 用来停止一个服务 (并不会重启现有的)。 |
service frobozz restart | systemctl restart frobozz.service | 用来停止并启动一个服务。 |
service frobozz reload | systemctl reload frobozz.service | 当支持时,重新装载配置文件而不中断等待操作。 |
service frobozz condrestart | systemctl condrestart frobozz.service | 如果服务正在运行那么重启它。 |
service frobozz status | systemctl status frobozz.service | 汇报服务是否正在运行。 |
ls /etc/rc.d/init.d/ | ls /lib/systemd/system/*.service /etc/systemd/system/*.service | 用来列出可以启动或停止的服务列表。 |
chkconfig frobozz on | systemctl enable frobozz.service | 在下次启动时或满足其他触发条件时设置服务为启用 |
chkconfig frobozz off | systemctl disable frobozz.service | 在下次启动时或满足其他触发条件时设置服务为禁用 |
chkconfig frobozz | systemctl is-enabled frobozz.service | 用来检查一个服务在当前环境下被配置为启用还是禁用。 |
chkconfig frobozz –list | ls /etc/systemd/system/*.wants/frobozz.service | 用来列出该服务在哪些运行级别下启用和禁用。 |
chkconfig frobozz –add | 不需要,没有等效命令。 |
注意以上列出的所有 /sbin/service 和 /sbin/chkconfig 在 systemd 环境下依然可以工作,并且在必要的情况下将会被翻译成原生的等效命令。唯一的例外是 chkconfig –list。
额外的命令:
- 在 SysVinit,服务可以任意定义命令。例如 service iptables panic 或 service httpd graceful。原生 systemd 服务不具有此能力。
- 当编写原生 systemd 服务配置时,任何以这种方式定义了额外命令的服务需要定义其他、特定于服务的方式来完成此项任务。
- 查阅软件包自身的发布日志来了解可能进行类似操作的服务。
运行级别/目标:
Systemd 引入一个概念 目标,它的用途和运行级别类似,但是运行起来有一些不同。每一个目标使用名称而不是数字命名的,服务于一个特定的目的。which serve a similar purpose as runlevels but act a little different. Each target is named instead of numbered and is intended to serve a specific purpose. 一些 目标 通过继承另一个 目标 然后添加其他额外服务来实现。也有一些 systemd 目标 模仿通常的 sysvinit 运行级别,于是您依然可以通过熟悉的telinit RUNLEVEL
来切换 目标。在纯净 Fedora 系统上运行级别 0, 1, 3, 5, 和 6; 与特定的 目标 之间存在 1:1 的映射关系。遗憾的是,对于用户自定义运行级别 2 和 4 没法实现类似的转换。如果您使用了这些运行级别,建议您用 /etc/systemd/system/$YOURTARGET
的方式创建一个新的 systemd 目标,并以一个已有的运行级别作为基础 (您可以查看 /lib/systemd/system/graphical.target
作为例子),创建一个目录 /etc/systemd/system/$YOURTARGET.wants
,然后符号链接您想要启用的额外服务到该目录下 (您符号链接的服务位于 /lib/systemd/system
)。
sysvinit 运行级别 | systemd 目标 | 备注 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关闭系统。 |
1, s, single | runlevel1.target, rescue.target | 单用户模式。 |
2, 4 | runlevel2.target, runlevel4.target, multi-user.target | 用户定义/域特定运行级别。默认等同于 3。 |
3 | runlevel3.target, multi-user.target | 多用户,非图形化。用户可以通过多个控制台或网络登录。 |
5 | runlevel5.target, graphical.target | 多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 紧急 Shell |
改变运行级别:
sysvinit 命令 | systemd 命令 | 备注 |
---|---|---|
telinit 3 | systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target OR telinit 3) | 改变至多用户运行级别。 |
sed s/^id:.*:initdefault:/id:3:initdefault:/ | ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target | 设置在下一次启动时使用多用户运行级别。 |