From Fedora Project Wiki

该文档目的在于帮助系统管理员了解 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 panicservice 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 Halt the system.
1, s, single runlevel1.target, rescue.target Single user mode.
2, 4 runlevel2.target, runlevel4.target, multi-user.target User-defined/Site-specific runlevels. By default, identical to 3.
3 runlevel3.target, multi-user.target Multi-user, non-graphical. Users can usually login via multiple consoles or via the network.
5 runlevel5.target, graphical.target Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.
6 runlevel6.target, reboot.target Reboot
emergency emergency.target Emergency shell

改变运行级别:

sysvinit Command systemd Command Notes
telinit 3 systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target OR telinit 3) Change to multi-user run level.
sed s/^id:.*:initdefault:/id:3:initdefault:/ ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target Set to use multi-user runlevel on next reboot.