位置: IT常识 - 正文

初窥Linux系统中的进程管理工具SystemD(浅谈linux)

编辑:rootadmin
这篇文章主要介绍了Linux系统中的进程管理工具SystemD,SystemD的功能非常强大,远超一般的进程管理范围,需要的朋友可以参考下... 16-01-16

推荐整理分享初窥Linux系统中的进程管理工具SystemD(浅谈linux),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:你知道linux,“linux系统”,的linux,浅谈linux,细说linux,浅谈linux,趣谈linux系统,“linux系统”,内容如对您有帮助,希望把文章链接给更多的朋友!

SystemD是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布。Lennart是redhat员工,但SystemD不是redhat项目。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。SystemD这一名字源于Unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识。除此以外,SystemD亦是借代英文术语D体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。SystemD被设计用来改进SysVinit的缺点,与Ubuntu的upstart形成技术竞争。SystemD的很多概念来源于苹果的launchd。目标是尽可能启动更少进程;尽可能将更多进程并行启动(这是性能优于SysVinit的理念基础)。SystemD尽可能减少对Shell脚本的依赖。传统SysVinit使用inittab来决定运行哪些Shell脚本,大量使用Shell脚本被认为是效率低下无法并行的原因。SystemD使用了Linux专属技术,不再顾及POSIX兼容,只要能满足社会变革的需要,突破一些可能过时的技术约束,这也是当今创信理念的需要,相信市场会给出评判。与多数发行版使用的System V风格init相比,SystemD采用了以下新技术:采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;用cgroups代替PID来追踪进程,因此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。从设计构思上说,由于SystemD使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。有鉴于此,基于kFreeBSD分支的软件源无法纳入SystemD。

大多数主流发行版要么已经采用 Systemd,要么即将在下个发布中采用(如 Debian 和 Ubuntu)。在本教程中,我们使用 Fedora 21(该发行版已经是 Systemd 的优秀实验场地)的一个预览版进行演示,但不论您用哪个发行版,要用到的命令和注意事项都应该是一样的。这是 Systemd 的一个加分点:它消除了不同发行版之间许多细微且琐碎的区别。

在终端中输入 ps ax | grep systemd,看到第一行,其中的数字 1 表示它的进程号是1,也就是说它是 Linux 内核发起的第一个程序。因此,内核一旦检测完硬件并组织好了内存,就会运行 /usr/lib/systemd/systemd 可执行程序,这个程序会按顺序依次发起其他程序。(在还没有 Systemd 的日子里,内核会去运行 /sbin/init,随后这个程序会在名为 SysVinit 的系统中运行其余的各种启动脚本。)

Systemd 的核心是一个叫单元 unit的概念,它是一些存有关于服务service(在运行在后台的程序)、设备、挂载点、和操作系统其他方面信息的配置文件。Systemd 的其中一个目标就是简化这些事物之间的相互作用,因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行,Systemd 可以让这一切正常运作起来变得相当容易。(在没有 Systemd 的日子里,要使用脚本来把这些事情调配好,那可是相当丑陋的。)要列出您 Linux 系统上的所有单元,输入以下命令:

代码如下:systemctl list-unit-files

现在,systemctl 是与 Systemd 交互的主要工具,它有不少选项。在单元列表中,您会注意到这儿有一些格式化:被使能enabled的单元显示为绿色,被禁用disabled的显示为红色。标记为“static”的单元不能直接启用,它们是其他单元所依赖的对象。若要限制输出列表只包含服务,使用以下命令:

代码如下:systemctl list-unit-files --type=service

注意,一个单元显示为“enabled”,并不等于对应的服务正在运行,而只能说明它可以被开启。要获得某个特定服务的信息,以 GDM (Gnome Display Manager) 为例,输入以下命令:

代码如下:systemctl status gdm.service

这条命令提供了许多有用的信息:一段给人看的服务描述、单元配置文件的位置、启动的时间、进程号,以及它所从属的 CGroups(用以限制各组进程的资源开销)。

如果您去查看位于 /usr/lib/systemd/system/gdm.service 的单元配置文件,您可以看到各种选项,包括要被运行的二进制文件(“ExecStart”那一行),相冲突的其他单元(即不能同时进入运行的单元),以及需要在本单元执行前进入运行的单元(“After”那一行)。一些单元有附加的依赖选项,例如“Requires”(必要的依赖)和“Wants”(可选的依赖)。

此处另一个有趣的选项是:

代码如下:Alias=display-manager.service

当您启动 gdm.service 后,您将可以通过 systemctl status display-manager.service 来查看它的状态。当您知道有显示管理程序 display manager在运行并想对它做点什么,但您不关心那究竟是 GDM,KDM,XDM 还是什么别的显示管理程序时,这个选项会非常有用。

“目标target”锁定

如果您在 /usr/lib/systemd/system 目录中输入 ls 命令,您将看到各种以 .target 结尾的文件。启动目标 target是一种将多个单元聚合在一起以致于将它们同时启动的方式。例如,对大多数类 Unix 操作系统而言有一种“多用户multi-user”状态,意思是系统已被成功启动,后台服务正在运行,并且已准备好让一个或多个用户登录并工作——至少在文本模式下。(其他状态包括用于进行管理工作的单用户single-user状态,以及用于机器关机的重启reboot状态。)

如果您打开 multi-user.target 文件一探究竟,您可能期待看到的是一个要被启动的单元列表。但您会发现这个文件内部几乎空空如也——其实,一个服务会通过 WantedBy 选项让自己成为启动目标的依赖。因此如果您去打开 avahi-daemon.service, NetworkManager.service 及其他 .service 文件看看,您将在 Install 段看到这一行:

代码如下:WantedBy=multi-user.target

因此,切换到多用户启动目标会使能enable那些包含上述语句的单元。还有其他一些启动目标可用(例如 emergency.target 提供一个紧急情况使用的 shell,以及 halt.target 用于机器关机),您可以用以下方式轻松地在它们之间切换:

代码如下:systemctl isolate emergency.target

在许多方面,这些都很像 SysVinit 中的运行级 runlevel,如文本模式的 multi-user.target 类似于第3运行级,graphical.target 类似于第5运行级,reboot.target 类似于第6运行级,诸如此类。

开启与停止

现在您也许陷入了沉思:我们已经看了这么多,但仍没看到如何停止和开启服务!这其实是有原因的。从外部看,Systemd 也许很复杂,像野兽一般难以驾驭。因此在您开始摆弄它之前,有必要从宏观的角度看看它是如何工作的。实际用来管理服务的命令非常简单:

代码如下:systemctl stop cups.servicesystemctl start cups.service

(若某个单元被禁用了,您可以先通过 systemctl enable 加上该单元名的方式将其使能。这种做法会为该单元创建一个符号链接,并将其放置在当前启动目标的 .wants 目录下,这些 .wants 目录在/etc/systemd/system 文件夹中。)

初窥Linux系统中的进程管理工具SystemD(浅谈linux)

还有两个有用的命令是 systemctl restart 和 systemctl reload,后面接单元名。后者用于让单元重新加载它的配置文件。Systemd 的绝大部分都有良好的文档,因此您可以查看手册 (man systemctl) 了解每条命令的细节。

定时器单元:取代 Cron

除了系统初始化和服务管理,Systemd 还染指了其他方面。在很大程度上,它能够完成 cron 的工作,而且可以说是以更灵活的方式(并带有更易读的语法)。cron 是一个以规定时间间隔执行任务的程序——例如清除临时文件,刷新缓存等。

如果您再次进入 /usr/lib/systemd/system 目录,您会看到那儿有多个 .timer 文件。用 less 来查看这些文件,您会发现它们与 .service 和 .target 文件有着相似的结构,而区别在于 [Timer] 段。举个例子:

代码如下: [Timer] OnBootSec=1h OnUnitActiveSec=1w

OnBootSec 选项告诉 Systemd 在系统启动一小时后启动这个单元。第二个选项的意思是:自那以后每周启动这个单元一次。关于定时器有大量选项您可以设置,输入 man systemd.time 查看完整列表。

Systemd 的时间精度默认为一分钟。也就是说,它会在设定时刻的一分钟内运行单元,但不一定精确到那一秒。这么做是基于电源管理方面的原因,但如果您需要一个没有任何延时且精确到毫秒的定时器,您可以添加以下一行:

代码如下: AccuracySec=1us

另外, WakeSystem 选项(可以被设置为 true 或 false)决定了定时器是否可以唤醒处于休眠状态的机器。

日志文件:向 journald 问声好

Systemd 的第二个主要部分是 journal 。这是个日志系统,类似于 syslog 但也有些显著区别。如果您是个 Unix 日志管理模式的粉丝,准备好出离愤怒吧:这是个二进制日志,因此您不能使用常规的命令行文本处理工具来解析它。这个设计决定不出意料地在网上引起了激烈的争论,但它的确有些优点。例如,日志可以被更系统地组织,带有更多的元数据,因此可以更容易地根据可执行文件名和进程号等过滤出信息。

要查看整个 journal,输入以下命令:

代码如下:journalctl

像许多其他的 Systemd 命令一样,该命令将输出通过管道的方式引向 less 程序,因此您可以使用空格键向下滚动,键入/(斜杠)查找,以及其他熟悉的快捷键。您也能在此看到少许颜色,像红色的警告及错误信息。

以上命令会输出很多信息。为了限制其只输出本次启动的消息,使用如下命令:

代码如下:journalctl -b

这就是 Systemd 大放异彩的地方!您想查看自上次启动以来的全部消息吗?试试 journalctl -b -1 吧。再上一次的?用 -2 替换 -1 吧。那自某个具体时间,例如2014年10月24日16:38以来的呢?

代码如下:journalctl -b --since=”2014-10-24 16:38”

即便您对二进制日志感到遗憾,那依然是个有用的特性,并且对许多系统管理员来说,构建类似的过滤器比起写正则表达式而言容易多了。

我们已经可以根据特定的时间来准确查找日志了,那可以根据特定程序吗?对单元而言,试试这个:

代码如下:journalctl -u gdm.service

(注意:这是个查看 X server 产生的日志的好办法。)那根据特定的进程号?

代码如下:journalctl _PID=890

您甚至可以请求只看某个可执行文件产生的消息:

代码如下:journalctl /usr/bin/pulseaudio

若您想将输出的消息限制在某个优先级,可以使用 -p 选项。该选项参数为 0 的话只会显示紧急消息(也就是说,是时候向 $DEITY 祈求保佑了)(LCTT 译注: $DEITY 是一个计算机方面的幽默,DEITY 是指广义上的“神”,$前缀表示这是一个变量),为 7 的话会显示所有消息,包括调试消息。请查看手册 (man journalctl) 获取更多关于优先级的信息。

值得指出的是,您也可以将多个选项结合在一起,若想查看在当前启动中由 GDM 服务输出的优先级数小于等于 3 的消息,请使用下述命令:

代码如下:journalctl -u gdm.service -p 3 -b

最后,如果您仅仅想打开一个随 journal 持续更新的终端窗口,就像在没有 Systemd 时使用 tail 命令实现的那样,输入 journalctl -f 就好了。

没有 Systemd 的生活?

如果您就是完全不能接受 Systemd,您仍然有一些主流发行版中的选择。尤其是 Slackware,作为历史最为悠久的发行版,目前还没有做出改变,但它的主要开发者并没有将其从未来规划中移除。一些不出名的发行版也在坚持使用 SysVinit 。

但这又将持续多久呢?Gnome 正越来越依赖于 Systemd,其他的主流桌面环境也会步其后尘。这也是引起 BSD 社区一阵恐慌的原因:Systemd 与 Linux 内核紧密相连,导致在某种程度上,桌面环境正变得越来越不可移植。一种折衷的解决方案也许会以 Uselessd (http://uselessd.darknedgy.net) 的形式到来:一种裁剪版的 Systemd,纯粹专注于启动和监控进程,而不消耗整个基础系统。

本文链接地址:https://www.jiuchutong.com/zhishi/277482.html 转载请保留说明!

上一篇:怎么制作网线(怎么制作网线接口)

下一篇:使用ping命令测试网络故障(ping命令测试结果)

  • vivox80pro怎么扩大内存(vivoy85a手机怎么扩大内存)

    vivox80pro怎么扩大内存(vivoy85a手机怎么扩大内存)

  • 华为应用助手是干嘛的(华为应用助手是干什么的)

    华为应用助手是干嘛的(华为应用助手是干什么的)

  • 笔记本电脑屏幕摔坏了能修吗(笔记本电脑屏幕暗怎么调亮)

    笔记本电脑屏幕摔坏了能修吗(笔记本电脑屏幕暗怎么调亮)

  • 7p重量多少克(iphone 7p重量是多少克)

    7p重量多少克(iphone 7p重量是多少克)

  • 笔记本怎么下载歌曲到u盘(笔记本怎么下载app并安装)

    笔记本怎么下载歌曲到u盘(笔记本怎么下载app并安装)

  • 网关和路由器哪个网速快(网关和路由器哪个费钱)

    网关和路由器哪个网速快(网关和路由器哪个费钱)

  • 200兆宽带手机测速是多少(200兆宽带手机测速多少兆正常)

    200兆宽带手机测速是多少(200兆宽带手机测速多少兆正常)

  • 陌陌用微信登录好友会知道吗(陌陌用微信登录后好友都能看到)

    陌陌用微信登录好友会知道吗(陌陌用微信登录后好友都能看到)

  • pclm10什么手机(pclm10手机多少钱)

    pclm10什么手机(pclm10手机多少钱)

  • 华为畅享10plus怎么清理应用(华为畅享10plus怎么唤醒小艺)

    华为畅享10plus怎么清理应用(华为畅享10plus怎么唤醒小艺)

  • 苹果手机摔了反复重启(苹果手机摔了反复开机关机)

    苹果手机摔了反复重启(苹果手机摔了反复开机关机)

  • ps最大兼容是怎么回事(ps最大兼容怎么打开)

    ps最大兼容是怎么回事(ps最大兼容怎么打开)

  • 笔记本显卡和台式机显卡区别(笔记本显卡和台式机显卡性能对比)

    笔记本显卡和台式机显卡区别(笔记本显卡和台式机显卡性能对比)

  • 有没有识别文字的软件(有没有识别文字读出来的软件)

    有没有识别文字的软件(有没有识别文字读出来的软件)

  • 双11红包退款之后还能用吗(双11用的红包退款了红包还会返还吗)

    双11红包退款之后还能用吗(双11用的红包退款了红包还会返还吗)

  • win7支持uefi启动吗(windows7支持uefi)

    win7支持uefi启动吗(windows7支持uefi)

  • 如何卸载小米视频(卸载小米视频会卡米吗)

    如何卸载小米视频(卸载小米视频会卡米吗)

  • 苹果xled灯闪烁在哪里(苹果xled灯闪烁怎么开)

    苹果xled灯闪烁在哪里(苹果xled灯闪烁怎么开)

  • 三层交换机是那三层(三层交换机那款好)

    三层交换机是那三层(三层交换机那款好)

  • 小米手机4底部按键失灵(小米手机底部上滑看点怎么关闭)

    小米手机4底部按键失灵(小米手机底部上滑看点怎么关闭)

  • 全民k歌ktv模式怎么保留视频(全民K歌KTV模式怎么取消)

    全民k歌ktv模式怎么保留视频(全民K歌KTV模式怎么取消)

  • bm22电池是什么手机(bm22电池怎么样)

    bm22电池是什么手机(bm22电池怎么样)

  • qq消息免打扰还能收到消息吗(qq消息免打扰还能收到语音通话吗)

    qq消息免打扰还能收到消息吗(qq消息免打扰还能收到语音通话吗)

  • vivo反向充电怎么弄(vivo反向充电怎么给苹果充电)

    vivo反向充电怎么弄(vivo反向充电怎么给苹果充电)

  • iphonex所有软件打不开(iphonex所有软件都打不开关机不了锁屏不了)

    iphonex所有软件打不开(iphonex所有软件都打不开关机不了锁屏不了)

  • 谷歌浏览器怎么设置flash插件(谷歌浏览器怎么下载)

    谷歌浏览器怎么设置flash插件(谷歌浏览器怎么下载)

  • Win10 Build 21359预览版开机后重启应用怎么设置?(windows 10 build 21354)

    Win10 Build 21359预览版开机后重启应用怎么设置?(windows 10 build 21354)

  • ChatGPT会让6个低端岗位失业

    ChatGPT会让6个低端岗位失业

  • 以固定资产投资的会计处理
  • 季报业务活动表本月数
  • 拆迁补偿费返还政策
  • 有限责任公司相关规定
  • 会计核算体系的中心环节是什么
  • 进项税额大于销项税额需要结转吗
  • 报表的应付款太大怎么调?
  • 采购部付款申请单和财务付款流程
  • 企业纳税总额包含哪些
  • 技术服务发票是劳务发票吗
  • 虚列成本费用的后果
  • 公司房产税如何计算器
  • 无法读取金税盘时间版本号是什么意思
  • 付款账号姓名是什么意思
  • 管理费用月末结账
  • 一般纳税人增票流程
  • 作废代开发票,是否退还已纳税款?
  • 个人股权转给公司要交个税吗
  • 企业的污水处理设备可以间断性运行么
  • 个人免征增值税起征点
  • 管理员已阻止你运行此应用 win10
  • win10鼠标在哪
  • 给客户购买礼品怎么记账
  • 除了电脑杀毒软件还有啥
  • wordpress如何使用
  • php -i
  • 应交营业税计算公式
  • php 生成opcode
  • 罂粟的花季
  • Calanques de Piana岩层上的一个心形洞,法国科西嘉岛 (© joningall/Getty Images)
  • php aes
  • 零售金银首饰的商场要交消费税吗
  • js删除对象的方法
  • 程序员后续发展
  • jquery 元素
  • php源码 数据库
  • python里%s
  • 应计入营业外支出的科目有
  • 收到抵扣发票怎么做分录
  • phpcms添加内容
  • 运输发票抵扣进项税额
  • 未认证的进项税额会计分录
  • 旅游业差额开票税率
  • 负数发票是可以抵扣吗
  • 预计表示什么意思
  • 企业主营业务利润是由什么构成的
  • 安装sql server 2008提示重新启动计算机
  • access自动保存
  • 抵扣进项税额是啥意思
  • 生育津贴到公司账户了多久给个人
  • 核定征收企业可以享受研发费用加计扣除
  • 代扣代缴的个税可以税前扣除吗
  • 业务招待费的企业所得税扣除标准
  • 办公费税前扣除标准2023年
  • 报销无法取得发票
  • 缴纳税款滞纳金应计入哪个科目
  • 存量资金上缴财政怎么做账
  • 办公室装修费用怎么入账
  • 营改增后建筑业增值税税率
  • 存货的实际成本法
  • 施工赔偿款怎么记账
  • 企业对于发出的货物
  • 管理会计在企业中的地位如何?为什么
  • sql语句错误提示
  • sql server 复制表中行数据
  • windows10mobile官网
  • 同一个用户
  • rtmanager.exe - rtmanager是什么进程 有什么用
  • w10 2021年更新
  • xp取消开机启动项
  • administrator帐户已锁定
  • win7系统开机登录不了怎么修复
  • winrar指令
  • js中倒计时器怎么实现
  • js框架开发实例
  • Python的requests网络编程包使用教程
  • 江苏国税电子税务局开票流程
  • 营业税发票现在可以冲红么
  • 地税局开发票流程?
  • 福建是高原还是平原
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设