标签 systemd 下的文章

学习使用 systemd 创建启动你的游戏服务器的定时器。

之前,我们看到了如何手动的在开机与关机时在启用某个设备时在文件系统发生改变时 启用与禁用 systemd 服务。

定时器增加了另一种启动服务的方式,基于……时间。尽管与定时任务很相似,但 systemd 定时器稍微地灵活一些。让我们看看它是怎么工作的。

“定时运行”

让我们展开本系列前两篇文章你所设置的 Minetest 服务器作为如何使用定时器单元的第一个例子。如果你还没有读过那几篇文章,可以现在去看看。

你将通过创建一个定时器来“改进” Minetest 服务器,使得在服务器启动 1 分钟后运行游戏服务器而不是立即运行。这样做的原因可能是,在启动之前可能会用到其他的服务,例如发邮件给其他玩家告诉他们游戏已经准备就绪,你要确保其他的服务(例如网络)在开始前完全启动并运行。

最终,你的 minetest.timer 单元看起来就像这样:

# minetest.timer
[Unit]
Description=Runs the minetest.service 1 minute after boot up

[Timer]
OnBootSec=1 m
Unit=minetest.service

[Install]
WantedBy=basic.target

一点也不难吧。

如以往一般,开头是 [Unit] 和一段描述单元作用的信息,这儿没什么新东西。[Timer] 这一节是新出现的,但它的作用不言自明:它包含了何时启动服务,启动哪个服务的信息。在这个例子当中,OnBootSec 是告诉 systemd 在系统启动后运行服务的指令。

其他的指令有:

  • OnActiveSec=,告诉 systemd 在定时器启动后多长时间运行服务。
  • OnStartupSec=,同样的,它告诉 systemd 在 systemd 进程启动后多长时间运行服务。
  • OnUnitActiveSec=,告诉 systemd 在上次由定时器激活的服务启动后多长时间运行服务。
  • OnUnitInactiveSec=,告诉 systemd 在上次由定时器激活的服务停用后多长时间运行服务。

继续 minetest.timer 单元,basic.target 通常用作 后期引导服务 late boot services 同步点 synchronization point 。这就意味着它可以让 minetest.timer 单元运行在安装完 本地挂载点 local mount points 或交换设备,套接字、定时器、路径单元和其他基本的初始化进程之后。就像在第二篇文章中 systemd 单元里解释的那样,targets 就像 旧的运行等级 old run levels 一样,可以将你的计算机置于某个状态,或像这样告诉你的服务在达到某个状态后开始运行。

在前两篇文章中你配置的 minetest.service 文件最终看起来就像这样:

# minetest.service
[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page

[Service]
Type= simple
User=

ExecStart= /usr/games/minetest --server
ExecStartPost= /home//bin/mtsendmail.sh "Ready to rumble?" "Minetest Starting up"

TimeoutStopSec= 180
ExecStop= /home//bin/mtsendmail.sh "Off to bed. Nightie night!" "Minetest Stopping in 2 minutes"
ExecStop= /bin/sleep 120
ExecStop= /bin/kill -2 $MAINPID

[Install]
WantedBy= multi-user.target

这儿没什么需要修改的。但是你需要将 mtsendmail.sh(发送你的 email 的脚本)从:

#!/bin/bash
# mtsendmail
sleep 20
echo $1 | mutt -F /home/<username>/.muttrc -s "$2" my_minetest@mailing_list.com
sleep 10

改成:

#!/bin/bash
# mtsendmail.sh
echo $1 | mutt -F /home/paul/.muttrc -s "$2" [email protected]

你做的事是去除掉 Bash 脚本中那些蹩脚的停顿。Systemd 现在来做等待。

让它运行起来

确保一切运作正常,禁用 minetest.service

sudo systemctl disable minetest

这使得系统启动时它不会一同启动;然后,相反地,启用 minetest.timer

sudo systemctl enable minetest.timer

现在你就可以重启服务器了,当运行 sudo journalctl -u minetest.* 后,你就会看到 minetest.timer 单元执行后大约一分钟,minetest.service 单元开始运行。

 title=

图 1:minetest.timer 运行大约 1 分钟后 minetest.service 开始运行

时间的问题

minetest.timer 在 systemd 的日志里显示的启动时间为 09:08:33 而 minetest.service 启动时间是 09:09:18,它们之间少于 1 分钟,关于这件事有几点需要说明一下:首先,请记住我们说过 OnBootSec= 指令是从引导完成后开始计算服务启动的时间。当 minetest.timer 的时间到来时,引导已经在几秒之前完成了。

另一件事情是 systemd 给自己设置了一个 误差幅度 margin of error (默认是 1 分钟)来运行东西。这有助于在多个 资源密集型进程 resource-intensive processes 同时运行时分配负载:通过分配 1 分钟的时间,systemd 可以等待某些进程关闭。这也意味着 minetest.service 会在引导完成后的 1~2 分钟之间启动。但精确的时间谁也不知道。

顺便一提,你可以用 AccuracySec= 指令修改误差幅度

你也可以检查系统上所有的定时器何时运行或是上次运行的时间:

systemctl list-timers --all

 title=

图 2:检查定时器何时运行或上次运行的时间

最后一件值得思考的事就是你应该用怎样的格式去表示一段时间。Systemd 在这方面非常灵活:2 h2 hours2hr 都可以用来表示 2 个小时。对于“秒”,你可以用 secondssecondsecs。“分”也是同样的方式:minutesminuteminm。你可以检查 man systemd.time 来查看 systemd 能够理解的所有时间单元。

下一次

下次你会看到如何使用日历中的日期和时间来定期运行服务,以及如何通过组合定时器与设备单元在插入某些硬件时运行服务。

回头见!

在 Linux 基金会和 edx 上通过免费课程 “Introduction to Linux” 学习更多关于 Linux 的知识。


via: https://www.linux.com/blog/learn/intro-to-linux/2018/7/setting-timer-systemd-linux

作者:Paul Brown 选题:lujun9972 译者:LuuMing 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在上一篇文章中,我们展示了如何创建一个 systemd 服务并使普通用户可以启动和终止游戏服务器。但到目前为止,使用这个服务并不比直接运行服务器高明多少。让我们更进一步,让其可以向玩家发邮件,包括在服务器可用时通知玩家,在服务器关闭前警告玩家:

# minetest.service

[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page

[Service]
Type= simple

ExecStart= /usr/games/minetest --server
ExecStartPost= /home/<username>/bin/mtsendmail.sh "Ready to rumble?" "Minetest Starting up"

TimeoutStopSec= 180
ExecStop= /home/<username>/bin/mtsendmail.sh "Off to bed. Nightie night!" "
  Minetest Stopping in 2 minutes"
ExecStop= /bin/sleep 120
ExecStop= /bin/kill -2 $MAINPID

这里涉及几个新的指令。首先是 ExecStartPost 指令,该指令可以在主进程启动后马上执行任何你指定的操作。在本例中,你执行了一个自定义脚本 mtsendmail (内容如下),该脚本以邮件形式通知你的朋友服务器已经启动。

#!/bin/bash
# mtsendmail
echo $1 | mutt -F /home/<username>/.muttrc -s "$2" my_minetest@mailing_list.com

我们使用 Mutt 这个命令后邮件客户端发送消息。虽然从实际效果来看,上述脚本仅有 1 行,但 systemd 单元的参数中不能包含管道及重定向操作,故我们需要将其封装到脚本中。

顺便提一下,还有一个 ExecStartPre 指令,用于在服务主进程执行之前进行指定操作。

接下来我们看到,关闭服务器涉及了好几条指令。TimeoutStopSec 指令用于设置 systemd 友好关闭服务的最大等候时间,默认值大约是 90 秒。超过这个最大等候时间,systemd 会强制关闭服务并报错。考虑到你希望在彻底关闭服务器前给用户预留几分钟的时间,你需要将超时时间提高至 3 分钟,这样 systemd 就不会误认为服务关闭时出现问题。

接下来是关闭服务的具体指令部分。虽然没有 ExecStopPre 这样的指令,但你可以通过多次使用 ExecStop 指令实现关闭服务器前执行操作的目标。多个 ExecStop 指令按从上到下的顺序依次运行,这样你就可以在服务器真正关闭前向用户发送消息。

通过这个特性,你首先应该向你的朋友发邮件,警告其服务器即将关闭,然后等待两分钟,最后关闭服务器。可以使用 Ctrl + c 关闭 Minetest 服务器,该操作会被转换为一个中断信号(SIGINT);当你执行 kill -2 $MAINPID 时就会发送该中断信号,其中 $MAINPID 是 systemd 变量,用于记录你服务中主进程的 PID 信息。

看上去好多了!如果你此时启动服务:

systemctl --user start minetest

服务会启动 Minetest 服务器并向你的用户发送邮件。关闭服务的情形基本类似,只不过会额外留给用户 2 分钟时间退出登录。

开机自启动

下一步我们让你的服务在主机启动后立即可用,在主机关闭时自动关闭。

我们需要将你的服务文件移动到系统服务目录,即 /etc/systemd/system/

sudo mv /home/<username>/.config/systemd/user/minetest.service /etc/systemd/system/

如果你希望此时启动该服务,你需要拥有超级用户权限:

sudo systemctl start minetest

另外,可以使用如下命令检查服务状态:

sudo systemctl status minetest

你会发现服务很糟糕地处于失败状态,这是因为 systemd 不能通过上下文信息、特征、配置文件得知具体使用哪个用户运行该服务。在单元文件中增加 User 指令可以解决这个问题。

# minetest.service

[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page

[Service]
Type= simple
User= <username>

ExecStart= /usr/games/minetest --server
ExecStartPost= /home/<username>/bin/mtsendmail.sh "Ready to rumble?"
  "Minetest Starting up"

TimeoutStopSec= 180
ExecStop= /home/<username>/bin/mtsendmail.sh "Off to bed. Nightie night!"
  "Minetest Stopping in 2 minutes"
ExecStop= /bin/sleep 120
ExecStop= /bin/kill -2 $MAINPID

systemd 从 User 指令中得知应使用哪个用户的环境变量来正确运行该服务。你可以使用 root 用户,但这可能产生安全风险;使用你的个人用户会好一些,但不少管理员的做法是为服务单独创建一个用户,这样可以有效地将服务与其它用户和系统组件相互隔离。

下一步我们让你的服务在系统启动时自动启动,系统关闭时自动关闭。要达到这个目的,你需要 启用 你的服务;但在这之前,你还需要告知 systemd 从哪里 安装 它。

对于 systemd 而言,安装 意味着告知 systemd 在系统启动的具体哪个步骤激活你的服务。以通用 Unix 打印系统(cups.service)为例,它的启动在网络框架启动之后、其它打印服务启动之前。又如,minetest.server 需要使用用户邮件(及其它组件),需要等待网络和普通用户对应的服务就绪后才可启动。

你只需要在单元文件中添加一个新段和新指令:

...
[Install]
WantedBy= multi-user.target

你可以将其理解为“等待多用户系统的全部内容就绪”。systemd 中的“目标”类似于旧系统中的运行级别,可以用于将主机转移到一个或另一个状态,也可以像本例中这样让你的服务等待指定状态出现后运行。

你的最终 minetest.service 文件如下:

# minetest.service
[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page

[Service]
Type= simple
User= <username>

ExecStart= /usr/games/minetest --server
ExecStartPost= /home/<username>/bin/mtsendmail.sh "Ready to rumble?"
  "Minetest Starting up"

TimeoutStopSec= 180
ExecStop= /home/<username>/bin/mtsendmail.sh "Off to bed. Nightie night!"
  "Minetest Stopping in 2 minutes"
ExecStop= /bin/sleep 120
ExecStop= /bin/kill -2 $MAINPID

[Install]
WantedBy= multi-user.target

在尝试新的服务之前,你还需要对邮件脚本做一些调整:

#!/bin/bash
# mtsendmail

sleep 20
echo $1 | mutt -F /home/<username>/.muttrc -s "$2" my_minetest@mailing_list.com
sleep 10

这是因为系统需要一定的时间启动邮件系统(这里等待 20 秒),也需要一定时间完成邮件发送(这里等待 10 秒)。注意脚本中的等待时间数值适用于我的系统,你可能需要针对你的系统调整数值。

大功告成啦。执行如下操作:

sudo systemctl enable minetest

你的 Minetest 服务将在系统启动时自动启动,在系统关闭时友好关闭并通知你的用户。

总结

事实上 Debian、 Ubuntu 和一些族类的发行版提供了 minetest-server 这个特别的软件包,可以提供一部分上述功能,(但不包括邮件通知功能)。即使如此,你还是可以建立你独有的自定义服务;事实上,你目前建立的服务比 Debian 默认提供的服务更加通用,可以提供更多功能。

更进一步的说,我们这里描述的流程可以让你将大多数简单服务器转换为服务,类型可以是游戏、网站应用或其它应用。同时,这也是你名副其实地踏入 systemd 大师殿堂的第一步。


via: https://www.linux.com/blog/learn/2018/5/systemd-services-beyond-starting-and-stopping

作者:Paul Brown 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

让我们假设你希望搭建一个游戏服务器,运行 Minetest 这款非常酷、开源的,以采集 & 合成为主题的沙盒游戏。你希望将游戏运行在位于客厅的服务器中,以便搭建完成后可供你的学校或朋友使用。你知道内核邮件列表的管理就不过就是如此,那么对你来说也是足够的。

但你很快发现每次开机之后需要启动服务进程,每次关机之前需要安全地关闭服务器,十分繁琐和麻烦。

最初,你可能用守护进程的方式运行服务器:

minetest --server &

记住进程 PID 以便后续使用。

接着,你还需要通过邮件或短信的方式将服务器已经启动的信息告知你的朋友。然后你就可以开始游戏了。

转眼之间,已经凌晨三点,今天的战斗即将告一段落。但在你关闭主机、睡个好觉之前,还需要做一些操作。首先,你需要通知其它玩家服务器即将关闭,找到记录我们之前提到的 PID 的纸条,然后友好地关闭 Minetest 服务进程。

kill -2 <PID>

这是因为直接关闭主机电源很可能导致文件损坏。下一步也是最后一步,关闭主机电源。

一定有方法能让事情变得更简单。

让 Systemd 服务拯救你

让我们从构建一个普通用户可以(手动)运行的 systemd 服务开始,然后再逐步增加内容。

不需要管理员权限即可运行的服务位于 ~/.config/systemd/user/,故首先需要创建这个目录:

cd
mkdir -p ~/.config/systemd/user/

有很多类型的 systemd 单元 (曾经叫做 systemd 脚本),包括“计时器”和“路径”等,但我们这里关注的是“服务”类型。在 ~/.config/systemd/user/ 目录中创建 minetest.service 文件,使用文本编辑器打开并输入如下内容:

# minetest.service

[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page

[Service]
Type= simple
ExecStart= /usr/games/minetest --server

可以看到该单元中包含不同的段,其中 [Unit] 段主要为用户提供信息,给出该单元的描述及如何获得更多相关文档。

脚本核心位于 [Service] 段,首先使用 Type 指令确定服务类型。服务有多种类型,下面给出两个示例。如果你运行的进程设置环境变量、调用另外一个进程(主进程)、退出运行,那么你应该使用的服务类型为 forking。如果你希望在你的单元对应进程结束运行前阻断其他单元运行,那么你应该使用的服务类型为 oneshot

但 Minetest 服务器的情形与上面两种都不同,你希望启动服务器并使其在后台持续运行;这种情况下应该使用 simple 类型。

下面来看 ExecStart 指令,它给出 systemd 需要运行的程序。在本例中,你希望在后台运行 minetest 服务器。如上所示,你可以在可执行程序后面添加参数,但不能将一系列 Bash 命令通过管道连接起来。下面给出的例子无法工作:

ExecStart: lsmod | grep nvidia > videodrive.txt

如果你需要将 Bash 命令通过管道连接起来,可以将其封装到一个脚本中,然后运行该脚本。

还需要注意一点,systemd 要求你给出程序的完整路径。故如果你想使用 simple 类型运行类似 ls 的命令,你需要使用 ExecStart= /bin/ls

另外还有 ExecStop 指令用于定制服务终止的方式。我们会在第二部分讨论这个指令,但你要了解,如果你没有指定 ExecStop,systemd 会帮你尽可能友好地终止进程。

systemd.directives 的帮助页中包含完整指令列表,另外你可以在该网站上找到同样的列表,点击即可查看每个指令的具体信息。

虽然只有 6 行,但你的 minetest.service 已经是一个有完整功能的 systemd 单元。执行如下命令启动服务:

systemd --user start minetest

执行如下命令终止服务:

systemd --user stop minetest

选项 --user 告知 systemd 在你的本地目录中检索服务并用你的用户权限执行服务。

我们的服务器管理故事到此完成了第一部分。在第二部分,我们将在启动和终止服务的基础上,学习如何给用户发邮件、告知用户服务器的可用性。敬请期待。

可以通过 Linux 基金会和 edX 的免费课程 “Linux 入门”学习更多 Linux 知识。


via: https://www.linux.com/blog/learn/intro-to-linux/2018/5/writing-systemd-services-fun-and-profit

作者:Paul Brown 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

systemd 意即 系统守护进程 system daemon ,是一个新的初始化系统和系统管理工具,它现在非常流行,大部分的 Linux 发行版开始使用这种新的初始化系统。

systemctl 是一个 systemd 的工具,它可以帮助我们管理 systemd 守护进程。 它控制系统的启动程序和服务,使用并行化方式,为启动的服务激活套接字和 D-Bus,提供守护进程的按需启动,使用 Linux 控制组跟踪进程,维护挂载和自动挂载点。

此外,它还提供了日志守护进程、用于控制基本系统配置的功能,如主机名、日期、地区、维护已登录用户列表和运行容器和虚拟机、系统帐户、运行时目录和设置,以及管理简单网络配置、网络时间同步、日志转发和名称解析的守护进程。

什么是 chkservice

chkservice 是一个基于 ncurses 的在终端中管理 systemd 单元的工具。它提供了一个非常全面的 systemd 服务的视图,使得它们非常容易修改。

只有拥有超级管理权限才能够改变 systemd 单元的状态和 sysv 系统启动脚本。

在 Linux 安装 chkservice

我们可以通过两种方式安装 chkservice,通过包安装或者手动安装。

对于 Debian/Ubuntu,使用 APT-GET 命令APT 命令 安装 chkservice

$ sudo add-apt-repository ppa:linuxenko/chkservice
$ sudo apt-get update
$ sudo apt-get install chkservice

对于 Arch Linux 系的系统,使用 Yaourt 命令Packer 命令 从 AUR 库安装 chkservice

$ yaourt -S chkservice
或
$ packer -S chkservice

对于 Fedora,使用 DNF 命令 安装 chkservice

$ sudo dnf copr enable srakitnican/default
$ sudo dnf install chkservice

对于 Debian 系系统,使用 DPKG 命令 安装 chkservice

$ wget https://github.com/linuxenko/chkservice/releases/download/0.1/chkservice_0.1.0-amd64.deb
$ sudo dpkg -i chkservice_0.1.0-amd64.deb

对于 RPM 系的系统,使用 DNF 命令 安装 chkservice

$ sudo yum install https://github.com/linuxenko/chkservice/releases/download/0.1/chkservice_0.1.0-amd64.rpm

如何使用 chkservice

只需输入以下命令即可启动 chkservice 工具。 输出分为四部分。

  • 第一部分: 这一部分显示了守护进程的状态,比如可用的 [X] 或者不可用的 [ ] 或者静态的 [s] 或者被掩藏的 -m-
  • 第二部分: 这一部分显示守护进程的状态例如开始 > 或者停止 =
  • 第三部分: 这一部分显示单元的名称
  • 第四部分: 这一部分简短地显示了守护进程的一些信息
$ sudo chkservice

要查看帮助页面,按下 ?。 这将向您显示管理 systemd 服务的可用选项。

选择要启用或禁用的守护进程,然后点击空格键。

选择你想开始或停止的守护进程,然后按下 s

选择要重新启动的守护进程,然后按下 r,之后,您可以在顶部看到更新的提示。

按下 q 退出。


via: https://www.2daygeek.com/chkservice-a-tool-for-managing-systemd-units-from-linux-terminal/

作者:Ramya Nuvvula 译者:amwps290 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

一般情况下,常规用途的 Linux 发行版在开机启动时拉起各种相关服务进程,包括许多你可能无需使用的服务,例如 蓝牙 bluetooth 、Avahi、 调制解调管理器 ModemManager 、ppp-dns(LCTT 译注:此处作者笔误 ppp-dns 应该为 pppd-dns) 等服务进程,这些都是什么东西?用于哪里,有何功能?

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

查看开机启动项

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

$ systemctl list-unit-files --type=service | grep enabled
accounts-daemon.service                    enabled
anacron-resume.service                     enabled
anacron.service                            enabled
bluetooth.service                          enabled
brltty.service                             enabled
[...]

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

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

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

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

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

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

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

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

$ systemctl list-unit-files --type=service                       
UNIT FILE                                  STATE   
accounts-daemon.service                    enabled
acpid.service                              disabled
alsa-restore.service                       static    
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 提供了一些命令帮助调试系统开机启动问题。该命令会重演你的系统启动的所有消息。

$ journalctl -b

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

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

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

$ journalctl _PID=1

May 08 06:18:17 studio systemd[1]: Starting LSB: Raise network interfaces....
May 08 06:18:17 studio systemd[1]: Started LSB: Raise network interfaces..
May 08 06:18:17 studio systemd[1]: Reached target System Initialization.
May 08 06:18:17 studio systemd[1]: Started CUPS Scheduler.
May 08 06:18:17 studio systemd[1]: Listening on D-Bus System Message Bus Socket
May 08 06:18:17 studio systemd[1]: Listening on CUPS Scheduler.
[...]

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

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

$ systemd-analyze blame
         8.708s gpu-manager.service
         8.002s NetworkManager-wait-online.service
         5.791s mysql.service
         2.975s dev-sda3.device
         1.810s alsa-restore.service
         1.806s systemd-logind.service
         1.803s irqbalance.service
         1.800s lm-sensors.service
         1.800s grub-common.service

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

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


via: https://www.linux.com/learn/cleaning-your-linux-startup-process

作者:David Both 译者:penghuster 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

支持 Python 3 的 systemd 233 发布,同时有 70 多个改进与 Bug 修复

Lennart Poettering 3 月 1 日宣布,基于 Linux 操作系统的采用开源技术的 systemd 233 init 系统已普遍可用。

systemd 233 将很快进入各个发行版。它有很多改进,如果想确切知道更改或添加了哪些东西,可以查看 changelog。也可以关注软件库中你喜欢的发行版本中的 systemd 233,或者现在就下载 tarball

CentOS 7 发布重要安全补丁

3 月 6 日,针对 CentOS 7 系列操作系统的用户,发布了一个重要的 Linux 核心安全补丁,以解决最近发现的 4 个漏洞。

这 4 个漏洞分别是: CVE-2016-8630CVE-2016-8655,CVE-2016-9083CVE-2016-9084

CentOS 7 系列操作系统的所有用户都应尽快更新到新核心版本。该问题还影响到 Red Hat Enterprise Linux Desktop 7,Red Hat Enterprise Linux HPC Node 7,Red Hat Enterprise Linux Server 7,Red Hat Enterprise Linux Server TUS 7.3,以及 Red Hat Enterprise Linux Workstation 7 等系统的用户。

BlackArch Linux 现在提供超过 1700 款渗透测试工具,新版本 ISO 已发布

3 月 1 日,基于 Arch Linux 的 BlackArch Linux 操作系统发布新版 ISO,该系统主要面向渗透测试人员和安全研究者群体。 发布的 BlackArch Linux 2017-03-01 预装了超出 1700 款渗透测试工具,建议访问 BlackArch Linux 的官方站点 以更好的了解 ISO 中包含的工具。

Wine 2.3 发布,并改进了 Mortal Kombat X、Kholat 和 Witcher 3

Wine 开发团队宣布该开源且跨平台应用的新开发版本发布,可以让 Linux 和 Mac 用户安装使用仅为 Microsoft Windows 操作系统开发的应用和游戏。

Wine 2.3 为最新开发版本,这是在今年早些时候发布稳定 Wine 2.0 大版本后的第三个版本。 根据发布说明,Wine 2.3 共解决了 41 个问题。

如果想要编译和安装,可以下载 Wine 2.3 source tarball,不过这只是发布前版本,不适合于日常使用。

Mozilla Firefox 52.0 已在所有支持的 Ubuntu Linux 系统上可用,请更新

3 月 7 日,Mozilla 宣布 Firefox 52.0 web 浏览器发布,随后很快宣布,Firefox 52.0 已登录所有支持的 Ubuntu Linux 操作系统的稳定软件库。包括 Ubuntu 12.04 LTS (Precise Pangolin),Ubuntu 14.04 LTS (Trusty Tahr),Ubuntu 16.04 LTS (Xenial Xerus),以及 Ubuntu 16.10 (Yakkety Yak) 系统。也就是说,你只需升级你的安装来获得新版本。

Canonical 还提供了关于如何升级 Ubuntu Linux 操作系统的详细指导,请参见: https://wiki.ubuntu.com/Security/Upgrades