文章内容

2018/9/1 10:25:50,作 者: 黄兵

如何在Ubuntu 14.04中 enable/disable 一个 service?

    目前,在 Ubuntu 中有三种方法控制一个 Service 是否在开机时自动启动 —— SysVUpstart 和 Systemd。其中 Systemd 是在 Ubuntu 15.04 才引入 Ubuntu 中,因此在本文中对此不做介绍,下面将介绍如何使用 SysV 和 Upstart 来控制一个 Service 在开机或重启时是否自动启动。

SysV

    使用 SysV 来控制的 Service 的脚本都是放置在 /etc/init.d/ 目录下的,之后使用 update-rc.d 这个工具来控制相应 Service 的 enable 与 disable.
下面来查看一下 /etc/init.d/ 目录下的内容:

$ ls /etc/init.d/
lightdm     procps      README      saned              stunnel4  umountnfs.sh
networking  pulseaudio  reboot      sendsigs           sudo      umountroot
ondemand    rc          resolvconf  single             thermald  unattended-upgrades
openvpn     rc.local    rsync       skeleton           udev      urandom
pppd-dns    rcS         rsyslog     speech-dispatcher  umountfs  x11-common

上面这些都是可以使用 update-rc.d 来控制 enable/disable 的 Service, 下面介绍如何使用 update-rc.d 来控制这些 Service。

Disable 一个 service

Disable 一个 service, 即是在开机或者重启机器时不要启动这个 service, 要 disable 一个 service, 应该按照如下的格式使用 update-rc.d:

$ sudo update-rc.d -f service_name remove

其中, service_name 为要 disable 的 service 的名称,例如, 要 disable 掉 stunnel4 这个 service, 应该使用如下的命令:

$ sudo update-rc.d -f stunnel4 remove

缺点: 使用这种方法 disable 掉一个 service,当使用 apt-get 对这个 service 的软件包进行更新后,上面的操作就会失效,即在下次开机或者重启机器时,这个 service 又会自动启动。
解决方法: 在最近的 update-rc.d 版本中,update-rc.d 新增了两个参数 —— enable 和 disable, 使用 disable 参数即可 disable 一个 service, 并且即使这个 service 的软件包在之后进行了更新,其状态也不会变为 enable:

$ sudo update-rc.d stunnel4 disable

Enable 一个 service

Enable 一个 service, 即是在开机或者重启机器的时候,自动启动这个 service。要 enable 一个 service, 应该按照如下的格式使用 update-rc.d:

$ sudo update-rc.d service_name defaults

其中,service_name 为要 enable 的 service 的名称;另外,关键字 defaults 表示在 runlevel 为 2,3,4,5 时 enable 这个 service, 而在 runlevel 为 0,1,6 时 disable 这个 service, 因为我们通常使用的 runlevel 都是在 2-5 之间,所以使用 defaults 关键字就可以 enable 我们想要的 service 了。下面举例说明,假如要 enable stunnel4 这个 service, 应该使用如下的命令:

$ sudo update-rc.d stunnel4 defaults

如果执行上述命令时得到如下错误:

System start/stop links for /etc/init.d/stunnel4 already exist.

则改用如下命令即可:

sudo update-rc.d stunnel4 enable

update-rc.d 还有很多功能,例如,它可以精确地控制一个 service 在何种 runlevel 下 enable 或 disable, 甚至还可以控制 service 启动的优先级,如果你对此感兴趣的话,可以通过 man update-rc.d 来查看 update-rc.d的更多功能。

Upstart

    使用 Upstart 来控制的 service 都在 /etc/init/ 目录下放置有相应的 .conf 配置文件。由于在 Ubuntu 14.04 中使用 Upstart 来控制的 service 比较少,因此,对于一个 service, 如果你不确定其是否有 Upstart 来管控,可以使用下面格式的命令来进行查看:

$ initctl status service_name

$ status service_name

如果一个 service 不是由 Upstart 来管控,将会提示如下的错误:

status: Unknown job: service_name

其中,service_name 为要查看的 service 的名称。
在确定了某个 service 是由 Upstart 来管控之后,就可以使用下面的方法来 enable/disable 这个 service 了.

Disable 一个 service

要 Disable 一个有 Upstart 管控的 service 十分简单,只要按照如下格式执行命令即可:

echo "manual" | sudo tee /etc/init/service_name.override

其中,service_name 为要 disable 掉的 service 的名称。     
上面的命令只是在 /etc/init/ 目录下添加一个 service_name.override 文件,并向该文件中输入内容 manual。这样就可以 disable 掉 service_name 这个 service 了(助记:英文 manual 表示手工,暗示了该 service 为手工启动,而不是在开机或重启机器时自动启动).
下面举个例子,假如要 disable 掉 squid3 这个 service, 可以执行如下命令:

$ echo "manual" | sudo tee /etc/init/squid3.override

Enable 一个 service

    要 Enable 一个 service 更加简单,只要将 /etc/init/ 目录下的 .override 文件删除掉即可,上面的例子中,为了 disable 掉 squid3 这个 service, 在 /etc/ 目录下新建了一个文件 squid3.override, 现在想要 enable squid3 这个 service, 直接将文件 squid3.override 删除掉就可以了:

$ sudo rm /etc/init/squid3.override

临时 enable/disable 一个 service

    上面所介绍的方法都是永久性的 enable/disable 一个 service, 如果只是想临时 enable/disable 一个 service, 就要使用 service 这个命令了。service 这个工具的一个优点是,无论是对于 SysV 的脚本,还是对于 Upstart 的 job,都可以使用 service 来统一的管理。
使用 service 来 enable 一个 service:

$ sudo service service_name start

使用 service 来 disable 一个 service:

$ sudo service service_name stop

其中 service_name 为要 enable 或 disable 掉的 service 的名称。
另外,如果你想要 enable/disable 的 service 由 Upstart 管控,你还可以使用 Upstart 风格的管理方法:

  • start - Enable service: sudo initctl start service_name 或 $ sudo start service_name
  • stop - Disable service: sudo initctl stop servcie_name 或 sudo stop service_name

其中,service_name 为要 enable/disable 掉的 service 的名称。

参考:
AskUbuntu: How to enable or disable services?
AskUbuntu: How can I configure a service to run at startup
Debuntu: How-To: Managing Services With Update-Rc.D
DigitalOcean: The Upstart Event System: What It Is And How To Use It
 


如有侵权,邮件说明:huangbing200@gmail.com

本文转载自:如何在Ubuntu 14.04中 enable/disable 一个 service?

分享到:

发表评论

评论列表