http://0pointer.de/blog/projects/three-levels-of-off
关闭的三个级别
systmed中, 关闭一个服务(或者其它unit)有3个基本. 让我们看看都是哪些:
你能 stop 一个服务. 那只是简单的终止服务的运行实例,其它事情做的很少. 如果由于某激活(比如手动激活,socket激活,总线激活,系统启动激活或者硬件插拔激活)需要这个服务,服务将会启动. stop一个服务因而是非常简单的,临时的并且表明上的操作.这有一个如何stop NTP服务的例子:$ systemctl stop ntpd.service
这大致等同于如下在大多数类SysV系统中都提供的传统命令:
$ service ntpd stop
实际上, Fedora 15上, 你执行后面的那条命令,系统会自动转换成前一条命令执行.
您能 disable 一个服务. 这使服务与激活触发机制拖钩. 这意味着, 服务将不再在系统启动时激活,也不能被其它诸如socket, 总线或硬件插拔这些触发机制激活. 然而, 你仍能手动启动它. 如果服务已经启动, disable它将不能使其停止.下面演示如何disable一个服务:
$ systemctl disable ntpd.service
传统的Fedora系统中, 这差不多等同于如下命令:
$ chkconfig ntpd off
Fedora 15中, 如有需要,后一命令透明的转换成前一命令.
经常你要组合stop和disable服务, 来停止当前服务并保证不再启动:
$ systemctl disable ntpd.service
$ systemctl stop ntpd.service
像上例这样的命令通常用于Fedora里卸载systemd服务的包中.
disable一个服务是永久性的改变; 除非撤销它将一直保持, 即使系统重启动也是如此.
你能 mask 一个服务. 这就像disable一个服务, 但是增强型的. 它不但确保服务不再自动启动了, 而且确保服务也不能手动启动了. 这有点像systemd中的隐藏属性, 因为它通常没啥用, 并且容易使用户产生困惑. 下面是使用的例子:
$ ln -s /dev/null /etc/systemd/system/ntpd.service
$ systemctl daemon-reload
把一个服务文件链接到 /dev/null 你告诉systemd不启动这一服务完全屏蔽它的执行./etc/systemd/systemd下的unit文件是优先于/libsystemd/system有同样名字的文件的. 前者是系统管理员的范畴,后者是包管理者的范畴. 把你的链接放到/etc/systemd/system/ntpd.service你就能保证systemd不会去读上位的安装服务文件 /lib/systemd/system/ntpd.service .
systemd 将会认出链接到 /dev/null的单元并把它们显示成 masked . 如果你手动启动这样的服务 (比如通过 systemctl start ) 将会提升一些错误:.
A similar trick on SysV systems does not (officially) exist. However, there are a few unofficial hacks, such as editing the init script and placing an exit 0 at the top, or removing its execution bit. However, these solutions have various drawbacks, for example they interfere with the package manager.
Masking a service is a permanent change, much like disabling a service.
与stop和disable相对应, 用 systemctl start 来撤销 systemctl stop. 用systemctl enable 来撤销systemctl disable 用rm 来撤销 ln.
就这些了, 多谢!