中国领先的IT技术网站
|
|

如何对Linux系统开机启动项进行清理

Systemd 提供了许多很好的工具用于查看系统启动情况,也可以控制在系统启动时运行什么。在这篇文章中,我将说明在 Systemd 类发行版中如何关闭一些令人讨厌的进程。

作者:David Both来源:Linux中国|2017-09-04 09:38

【沙龙】51CTO诚邀您9月23号和多位技术大咖一起聊智能CDN的优化之路,抓紧时间哦!


 Linux系统开机启动项清理

Systemd 提供了许多很好的工具用于查看系统启动情况,也可以控制在系统启动时运行什么。在这篇文章中,我将说明在 Systemd 类发行版中如何关闭一些令人讨厌的进程。

查看开机启动项

在过去,你能很容易通过查看 /etc/init.d 了解到哪些服务进程会在引导时启动。Systemd 以不同的方式展现,你可以使用如下命令罗列允许开机启动的服务进程。

  1. $ systemctl list-unit-files --type=service | grep enabled 
  2. accounts-daemon.service                    enabled 
  3. anacron-resume.service                     enabled 
  4. anacron.service                            enabled 
  5. bluetooth.service                          enabled 
  6. brltty.service                             enabled 
  7. [...] 

在此列表顶部,对我来说,蓝牙服务是冗余项,因为在该电脑上我不需要使用蓝牙功能,故无需运行此服务。下面的命令将停止该服务进程,并且使其开机不启动。

  1. $ sudo systemctl stop bluetooth.service 
  2. $ sudo systemctl disable bluetooth.service 

你可以通过下面命令确定是否操作成功。

  1. $ systemctl status bluetooth.service 
  2.  bluetooth.service - Bluetooth service 
  3.   Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled; vendor preset: enabled) 
  4.   Active: inactive (dead) 
  5.     Docs: man:bluetoothd(8) 

停用的服务进程仍然能够被另外一个服务进程启动。如果你真的想在任何情况下系统启动时都不启动该进程,无需卸载该它,只需要把它掩盖起来就可以阻止该进程在任何情况下开机启动。

  1. $ sudo systemctl mask bluetooth.service 
  2.  Created symlink from /etc/systemd/system/bluetooth.service to /dev/null

一旦你对禁用该进程启动而没有出现负面作用感到满意,你也可以选择卸载该程序。

通过执行命令可以获得如下服务列表:

  1. $ systemctl list-unit-files --type=service                        
  2. UNIT FILE                                  STATE    
  3. accounts-daemon.service                    enabled 
  4. acpid.service                              disabled 
  5. alsa-restore.service                       static     
  6. alsa-utils.service                         masked 

你不能启用或禁用静态服务,因为静态服务被其他的进程所依赖,并不意味着它们自己运行。

哪些服务能够禁止?

如何知道你需要哪些服务,而哪些又是可以安全地禁用的呢?它总是依赖于你的个性化需求。

这里举例了几个服务进程的作用。许多服务进程都是发行版特定的,所以你应该看看你的发行版文档(比如通过 google 或 StackOverflow)。

  • accounts-daemon.service 是一个潜在的安全风险。它是 AccountsService 的一部分,AccountsService 允许程序获得或操作用户账户信息。我不认为有好的理由能使我允许这样的后台操作,所以我选择掩盖mask该服务进程。
  • avahi-daemon.service 用于零配置网络发现,使电脑超容易发现网络中打印机或其他的主机,我总是禁用它,别漏掉它。
  • brltty.service 提供布莱叶盲文设备支持,例如布莱叶盲文显示器。
  • debug-shell.service 开放了一个巨大的安全漏洞(该服务提供了一个无密码的 root shell ,用于帮助 调试 systemd 问题),除非你正在使用该服务,否则永远不要启动服务。
  • ModemManager.service 该服务是一个被 dbus 激活的守护进程,用于提供移动宽频broadband(2G/3G/4G)接口,如果你没有该接口,无论是内置接口,还是通过如蓝牙配对的电话,以及 USB 适配器,那么你也无需该服务。
  • pppd-dns.service 是一个计算机发展的遗物,如果你使用拨号接入互联网的话,保留它,否则你不需要它。
  • rtkit-daemon.service 听起来很可怕,听起来像是 rootkit。 但是你需要该服务,因为它是一个实时内核调度器real-time kernel scheduler。
  • whoopsie.service 是 Ubuntu 错误报告服务。它用于收集 Ubuntu 系统崩溃报告,并发送报告到 https://daisy.ubuntu.com 。 你可以放心地禁止其启动,或者永久的卸载它。
  • wpa_supplicant.service 仅在你使用 Wi-Fi 连接时需要。

系统启动时发生了什么?

Systemd 提供了一些命令帮助调试系统开机启动问题。该命令会重演你的系统启动的所有消息。

  1. $ journalctl -b 
  2. -- Logs begin at Mon 2016-05-09 06:18:11 PDT, 
  3. end at Mon 2016-05-09 10:17:01 PDT. -- 
  4. May 16 06:18:11 studio systemd-journal[289]: 
  5. Runtime journal (/run/log/journal/) is currently using 8.0M. 
  6. Maximum allowed usage is set to 157.2M. 
  7. Leaving at least 235.9M free (of currently available 1.5G of space). 
  8. Enforced usage limit is thus 157.2M. 
  9. [...] 

通过命令 journalctl -b -1 可以复审前一次启动,journalctl -b -2 可以复审倒数第 2 次启动,以此类推。

该命令会打印出大量的信息,你可能并不关注所有信息,只是关注其中问题相关部分。为此,系统提供了几个过滤器,用于帮助你锁定目标。让我们以进程号为 1 的进程为例,该进程是所有其它进程的父进程。

  1. $ journalctl _PID=1 
  2. May 08 06:18:17 studio systemd[1]: Starting LSB: Raise network interfaces.... 
  3. May 08 06:18:17 studio systemd[1]: Started LSB: Raise network interfaces.. 
  4. May 08 06:18:17 studio systemd[1]: Reached target System Initialization. 
  5. May 08 06:18:17 studio systemd[1]: Started CUPS Scheduler. 
  6. May 08 06:18:17 studio systemd[1]: Listening on D-Bus System Message Bus Socket 
  7. May 08 06:18:17 studio systemd[1]: Listening on CUPS Scheduler. 
  8. [...] 

这些打印消息显示了什么被启动,或者是正在尝试启动。

一个最有用的命令工具之一 systemd-analyze blame,用于帮助查看哪个服务进程启动耗时最长。

  1. $ systemd-analyze blame 
  2.          8.708s gpu-manager.service 
  3.          8.002s NetworkManager-wait-online.service 
  4.          5.791s mysql.service 
  5.          2.975s dev-sda3.device 
  6.          1.810s alsa-restore.service 
  7.          1.806s systemd-logind.service 
  8.          1.803s irqbalance.service 
  9.          1.800s lm-sensors.service 
  10.          1.800s grub-common.service 

这个特定的例子没有出现任何异常,但是如果存在系统启动瓶颈,则该命令将能发现它。

你也能通过如下资源了解 Systemd 如何工作:

【编辑推荐】

  1. Linux程序设计的一些优化措施
  2. 六个优雅的Linux命令行技巧
  3. Linux启动分析——init进程与app启动
  4. 调整Linux I/O调度器优化系统性能
  5. 利用命令行工具创建Linux/Mac系统下的网站备份
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

鸟哥的Linux私房菜 基础学习篇(第二版)

本书全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linu...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 学习达标赢Beats耳机