From Fedora Project Wiki
No edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 3: Line 3:
该文档目的在于帮助系统管理员了解 systemd 中可以取代原先 sysvinit 工作流程的命令。如果想要了解 systemd 的一般信息,参阅 [[systemd]]。
该文档目的在于帮助系统管理员了解 systemd 中可以取代原先 sysvinit 工作流程的命令。如果想要了解 systemd 的一般信息,参阅 [[systemd]]。


注意 'service' 和 'chkconfig' 命令在 systemd 环境下依然可用,该教程目的在于告诉您如何使用原生 systemctl 替代品。
{{admon/tip |注意 'service' 和 'chkconfig' 命令|这两条命令在 systemd 环境下依然可用,该教程目的在于告诉您如何使用原生 systemctl 替代品。}}


== 服务 ==
== 服务 ==


{|
{|border="1" cellspacing="0"
!sysvinit 命令!!systemd 命令!!备注
!Sysvinit 命令!!Systemd 命令!!备注
|-
|-
| service frobozz start || systemctl start frobozz.service || 用来启动一个服务 (并不会重启现有的)
| service frobozz start || systemctl start frobozz.service || 用来启动一个服务 (并不会重启现有的)
Line 22: Line 22:
| service frobozz status || systemctl status frobozz.service || 汇报服务是否正在运行。
| service frobozz status || systemctl status frobozz.service || 汇报服务是否正在运行。
|-
|-
| ls /etc/rc.d/init.d/ || ls /lib/systemd/system/*.service /etc/systemd/system/*.service || 用来列出可以启动或停止的服务列表。
| ls /etc/rc.d/init.d/ || systemctl list-unit-files --type=service (推荐)<br /> ls /lib/systemd/system/*.service /etc/systemd/system/*.service || 用来列出可以启动或停止的服务列表。
|-
|-
| chkconfig frobozz on || systemctl enable frobozz.service || 在下次启动时或满足其他触发条件时设置服务为启用
| chkconfig frobozz on || systemctl enable frobozz.service || 在下次启动时或满足其他触发条件时设置服务为启用
Line 30: Line 30:
| chkconfig frobozz || systemctl is-enabled frobozz.service || 用来检查一个服务在当前环境下被配置为启用还是禁用。
| chkconfig frobozz || systemctl is-enabled frobozz.service || 用来检查一个服务在当前环境下被配置为启用还是禁用。
|-
|-
|- chkconfig --list || ls /etc/systemd/system/*.wants/ || 输出在各个运行级别下服务的启用和禁用情况
| chkconfig --list || systemctl list-unit-files --type=service (推荐)<br/> ls /etc/systemd/system/*.wants/ || 输出在各个运行级别下服务的启用和禁用情况
|-
| chkconfig frobozz --list || ls /etc/systemd/system/*.wants/frobozz.service || 用来列出该服务在哪些运行级别下启用和禁用。
| chkconfig frobozz --list || ls /etc/systemd/system/*.wants/frobozz.service || 用来列出该服务在哪些运行级别下启用和禁用。
|-
|-
| chkconfig frobozz --add || || 不需要,没有等效命令。
| chkconfig frobozz --add || systemctl daemon-reload || 当您创建新服务文件或者变更设置时使用。
|-
|-
|}
|}


Note that all /sbin/service and /sbin/chkconfig lines listed above continue to work on systemd, and will be translated to native equivalents as necessary. The only exception is chkconfig --list.
注意以上列出的所有 /sbin/service /sbin/chkconfig systemd 环境下依然可以工作,并且在必要的情况下将会被翻译成原生的等效命令。唯一的例外是 chkconfig --list。


{{admon/warning|Additional commands|In SysVinit, services can define arbitrary commands. Examples would be '''service iptables panic''', or '''service httpd graceful'''. Native systemd services do not have this ability.
{{admon/warning|额外的命令|在 SysVinit,服务可以任意定义命令。例如 '''service iptables panic''' '''service httpd graceful'''。原生 systemd 服务不具有此能力。
Any service that defines an additional command in this way would need to define some other, service-specific, way to accomplish this task when writing a native systemd service definition.
当编写原生 systemd 服务配置时,任何以这种方式定义了额外命令的服务需要定义其他、特定于服务的方式来完成此项任务。


Check the package-specific release notes for any services that may have done this.}}
查阅软件包自身的发布日志来了解可能进行类似操作的服务。}}


== Runlevels/targets ==
== 运行级别/目标 ==


Systemd has a concept of ''targets'' 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.  Some ''targets'' are implemented by inheriting all of the services of another ''target'' and adding additional services to it.  There are systemd ''target''s that mimic the common sysvinit runlevels so you can still switch ''target''s using the familiar <code>telinit RUNLEVEL</code> command.  The runlevels that are assigned a specific purpose on vanilla Fedora installs; 0, 1, 3, 5, and 6; have a 1:1 mapping with a specific systemd ''target''.  Unfortunately, there's no good way to do the same for the user-defined runlevels like 2 and 4.  If you make use of those it is suggested that you make a new named systemd ''target'' as <code>/etc/systemd/system/$YOURTARGET</code> that takes one of the existing runlevels as a base (you can look at <code>/lib/systemd/system/graphical.target</code> as an example), make a directory <code>/etc/systemd/system/$YOURTARGET.wants</code>, and then symlink the additional services that you want to enable into that directory.  (The service unit files that you symlink live in <code>/lib/systemd/system</code>).
Systemd 引入一个概念:''目标''。它的用途和运行级别类似,但是运行起来有一些不同。每一个''目标''使用名称而不是数字命名的,服务于一个特定的目的。一些 ''目标'' 通过继承另一个 ''目标'' 然后添加其他额外服务来实现。也有一些 systemd ''目标'' 模仿通常的 sysvinit 运行级别,于是您依然可以通过熟悉的<code>telinit RUNLEVEL</code> 来切换 ''目标''。在纯净 Fedora 系统上运行级别 0, 1, 3, 5, 6; 与特定的 ''目标'' 之间存在 1:1 的映射关系。遗憾的是,对于用户自定义运行级别 2 4 没法实现类似的转换。如果您使用了这些运行级别,建议您用 <code>/etc/systemd/system/$YOURTARGET</code> 的方式创建一个新的 systemd ''目标'',并以一个已有的运行级别作为基础 (您可以查看 <code>/lib/systemd/system/graphical.target</code> 作为例子),创建一个目录 <code>/etc/systemd/system/$YOURTARGET.wants</code>,然后符号链接您想要启用的额外服务到该目录下 (您符号链接的服务位于 <code>/lib/systemd/system</code>)


{|
{|border="1" cellspacing="0"
!sysvinit Runlevel!!systemd Target!!Notes
!Sysvinit 运行级别!!Systemd 目标!!备注
|-
|-
| 0 || runlevel0.target, poweroff.target || Halt the system.
| 0 || runlevel0.target, poweroff.target || 关闭系统。
|-
|-
| 1, s, single || runlevel1.target, rescue.target || Single user mode.
| 1, s, single || runlevel1.target, rescue.target || 单用户模式。
|-
|-
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || User-defined/Site-specific runlevels. By default, identical to 3.
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || 用户定义/域特定运行级别。默认等同于 3。
|-
|-
| 3 || runlevel3.target, multi-user.target || Multi-user, non-graphical.  Users can usually login via multiple consoles or via the network.
| 3 || runlevel3.target, multi-user.target || 多用户,非图形化。用户可以通过多个控制台或网络登录。
|-
|-
| 5 || runlevel5.target, graphical.target || Multi-user, graphical.  Usually has all the services of runlevel 3 plus a graphical login.
| 5 || runlevel5.target, graphical.target || 多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。
|-
|-
| 6 || runlevel6.target, reboot.target || Reboot
| 6 || runlevel6.target, reboot.target || 重启
|-
|-
| emergency || emergency.target || Emergency shell
| emergency || emergency.target || 紧急 Shell
|-
|-
|}
|}


Changing runlevels:
改变运行级别:


{|
{|border="1" cellspacing="0"
!sysvinit Command!!systemd Command!!Notes
!Sysvinit 命令!!Systemd 命令!!备注
|-
|-
| telinit 3 || systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target OR telinit 3) || Change to multi-user run level.
| 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 || Set to use multi-user runlevel on next reboot.
| sed s/^id:.*:initdefault:/id:3:initdefault:/ || ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target || 设置在下一次启动时使用多用户运行级别。
|}
|}
[[Category:Zh]]

Latest revision as of 03:41, 25 January 2013

该文档目的在于帮助系统管理员了解 systemd 中可以取代原先 sysvinit 工作流程的命令。如果想要了解 systemd 的一般信息,参阅 systemd

Idea.png
注意 '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/ systemctl list-unit-files --type=service (推荐)
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 --list systemctl list-unit-files --type=service (推荐)
ls /etc/systemd/system/*.wants/
输出在各个运行级别下服务的启用和禁用情况
chkconfig frobozz --list ls /etc/systemd/system/*.wants/frobozz.service 用来列出该服务在哪些运行级别下启用和禁用。
chkconfig frobozz --add systemctl daemon-reload 当您创建新服务文件或者变更设置时使用。

注意以上列出的所有 /sbin/service 和 /sbin/chkconfig 在 systemd 环境下依然可以工作,并且在必要的情况下将会被翻译成原生的等效命令。唯一的例外是 chkconfig --list。

Warning.png
额外的命令
在 SysVinit,服务可以任意定义命令。例如 service iptables panicservice httpd graceful。原生 systemd 服务不具有此能力。

当编写原生 systemd 服务配置时,任何以这种方式定义了额外命令的服务需要定义其他、特定于服务的方式来完成此项任务。

查阅软件包自身的发布日志来了解可能进行类似操作的服务。

运行级别/目标

Systemd 引入一个概念:目标。它的用途和运行级别类似,但是运行起来有一些不同。每一个目标使用名称而不是数字命名的,服务于一个特定的目的。一些 目标 通过继承另一个 目标 然后添加其他额外服务来实现。也有一些 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 设置在下一次启动时使用多用户运行级别。