Chinaunix

标题: 如何更好的掌握和深入理解systemd [打印本页]

作者: niao5929    时间: 2015-03-13 21:01
标题: 如何更好的掌握和深入理解systemd
获奖名单已公布http://bbs.chinaunix.net/thread-4174269-1-1.html

话题背景

现在越来越多的LINUX系统都开始支持新的SYSTEMD启动器了。但是到目前为止,总感觉SYSTEMD似乎总是隔着一层薄纸。很多命令也在用。但是感觉没有之前的INITD直观了。不知道有没有深入研究的哥们,好好给大家讲讲它的机理以及各种配置文件之间的关系,帮助大家来更好的理解这个新的启动器。实际上Docker也是比较依赖这东西的。如果能够透彻的了解这点,管理员能够更好的掌控Linux系统本身



讨论话题
1、SYSTEMD下的自定义脚本如何编写?
2、各种/lib/systemd/system/下的service、socket文件中的具体配置的意义和关系?
3、systemctl命令执行机制的详细过程。


讨论时间
2015-03-17至2015-04-03


活动奖励
活动结束后将选取4名讨论精彩的童鞋,每人赠送一本《Red Hat Enterprise Linux 7.0系统管理》作为奖励。


奖品简介

作者:曹江华     
出版社:电子工业出版社
出版日期:2015 年3月
开本:16开
页码:502
版次:1-1


内容简介

以Red Hat Enterprise Linux 7.0为蓝本,分15章介绍了RHEL 7.0的基本使用和系统管理。主要包括自由软件和开源软件的基础知识、Linux的基础知识、RHEL7.0的安装、软件包管理、用户管理、磁盘管理和LVM管理、文件系统管理、TCP/IP网络配置、系统引导和启动、systemd服务管理、虚拟化应用、日志管理、使用Webmin、Linux iSCSI和GlusterFS网络文件系统配置、SELinux使用、内核审计、防火墙设置和升级等内容。



作者: niao5929    时间: 2015-03-17 13:58
顶起来。SYSTEMD越来越成为LINUX系统启动器的主流,单围绕着它的争议也确实非常大。因为这一点DEBIAN技术委员会也曾经发生过激烈的震动。但SYSTEMD的先进性还是大于了它引起的争执。UBUNTU也已经再起启动了关于使用SYSTEMD的计划。SYSTEMD本身是使用GPL发布的。到底它的好处是什么,我们只听到这个说法。不能明理其中的技术细节,我自己的机器很早就安装了FEDORA20,它确实让系统启动非常块,我的测试中开机也就是5秒,关机在3秒以内。但作为一个关心技术的人,我非常想知道这一切是如何实现的。
作者: chenyx    时间: 2015-03-17 15:48
支持下,还没怎么研究Systemd呢
作者: milujite    时间: 2015-03-17 16:19
本帖最后由 milujite 于 2015-03-17 16:46 编辑

恰好最近在看RHEL7的相关资料,RHEL7与6对比,改变真不是一点点,RHEL7上各种不适应。

讨论话题
1、systemd下的自定义脚本如何编写?

systemd自定义脚本普通用户最经常碰到的应该是Service unit写法其实我觉得比init脚本还容易,自定义功能也比init脚本要丰富很多,就算你不会写SHELL脚本,你也可以轻松使用systemd Service unit编写语法很快写一个服务的启动文件。以httpd脚本为例,最简单的unit文件只要包含以下几段配置就可以了

[Unit]
Description=Apache HTTP Server
#unit描述
After=syslog.target network.target
#定义启动的顺序,用init脚本得在rcX.d里命名Sxx来决定启动优先级,在systemd的unit文件里,直接指定after

[Service]
ExecStart=/usr/sbin/httpd -k start
ExecReload=/usr/sbin/httpd -k restart
ExecStop=/usr/sbin/httpd -k stop
#简单的3条命令设置启动、重启、停止。比自己写script去判定脚本传入参数简单多了。

[Install]
WantedBy=multi-user.target
#设置systemctl enable时httpd的运行级别,和chkconfig xxxx on类似。

对比下httpd的init脚本,部署起来简单不是一两个级别。当然,我这里只是举一个简单例子,systemd自定义unit的写法其实很多参数可用,可以参考http://www.freedesktop.org/software/systemd/man/systemd.unit.html

2、各种/lib/systemd/system/下的Service、Socket文件中的具体配置的意义和关系?
Service和Socket的的关系应该不是通过unit配置文件建立的,除了某些Service的unit文件定义Also=xxx.Socket字段,这情况下systemctl enable/disable的时候会将Socket文件一起复制到target目录。

个人理解,我觉得systemd的原理和inetd类似,inetd可以接管FTP/TELNET等服务,负责监控Socket的状态,在有访问请求时再去启动FTP/TELNET服务。systemd也类似这样,他预先创建进程需要的Socket,通过Linux进程的继承等机制,将套接字传递给新的服务进程,这样服务启动时就可以不再创建这些进程,而另外依赖这些Socket的服务也可以在依赖的服务还未启动时就启动完成。
使用init的情况下,假设A.Service启动创建了A.Socket,而B.Service启动依赖A.Socket,这种情况下,B.Service只能等A.Service启动完成后才能启动。
使用systemd的情况下,systemd先创建A.Socket,再通过fork或者exec启动A.Service和B.Service。这样A.Service和B.Service都可以同时启动。

同理,systemd情况下,dbus、文件系统等依赖关系也是通过这样打破的,因此可以实现一些服务的并行启动,减少系统启动时间。
假设init下,nfs共享/home目录,待网络启动后,/home目录对应的设备需要fsck,得fsck完才挂载文件系统,这过程是串行的。但是systemd可以先创建nfs需要的/home临时挂载点,先启动nfs服务,待/home目录对应的挂载设备完成fsck后,将临时的挂载点对应的设备替换成真正的挂载设备。这时候就算nfs对应的/home目录设备未完成fsck,这时systemd也可以将nfs访问请求的open系统调用挂起,待/home真正挂载完成后再执行open系统调用。


3、systemctl命令执行机制的详细过程。
没看明白systemctl命令执行的机制是指什么,systemctl只是一个控制命令,和chkconfig、service命令功能类似。
如果是说systemd进程的话,systemd是一个替代init的进程,只是启动服务的机制不同,init根据rcx.d里的脚本顺序,执行启动/关闭服务。而systemd使用Linux进程的继承等机制,解决依赖问题,巧妙的实现了并行启动,大大提升启动速度。但是Systemd和init的区别不仅仅是启动快这么简单,cgroup的结合,systemd-cgls、systemd-cgtop不仅服务跟踪管理起来更方便,也可以直接在systemd service unit里设置cgroup的的内存、cpu等限额功能。还有日志系统的结合,journalctl用起来也很方便。
作者: hexilanlan    时间: 2015-03-17 17:13
楼上 厉害        
作者: hexilanlan    时间: 2015-03-17 17:13
这个要持续关注。。。
作者: wait_rabbit    时间: 2015-03-17 18:02

虽然 systemd 引起的争论非常大,但是从个人的角度来看,还是很支持 systemd 的使用和推广的。

1 对于系统学习 systemd 的方法,自然是作者 Lennart 的21篇 blog: http://0pointer.de/blog/projects/systemd-for-admins-1.html

2 如果想先有一个主要了解,那么这篇文章非常不错:《浅析 Linux 初始化 init 系统,第 3 部分: Systemd》:http://www.ibm.com/developerwork ... ng_init3/index.html
作者: qq58945591    时间: 2015-03-18 00:23
说来惭愧,虽然学的是RHEL7,但红帽的教材里也没有详细的说明。也许是我懒得看吧。只是觉得它暂时就是替代service 和chkconfig 的功能...至于说的其他详细技术细节,真没去关注过.
作者: cryboy2001    时间: 2015-03-18 08:24
试用过rhel7,有不少的改变,最常用的改变就是systemd与firewall这两个,难度是没什么,看看就会用了。
作者: zhaopingzi    时间: 2015-03-18 09:15
SYSTEMD是什么   
作者: niao5929    时间: 2015-03-18 10:55
如果不出意外的化,这东西就是下一代Linux的启动器。回复 11# zhaopingzi


   
作者: zhaopingzi    时间: 2015-03-18 11:00
回复 12# niao5929


    启动器有什么技术含量?
作者: niao5929    时间: 2015-03-18 11:00
貌似现在这东西的中文详细技术支持文章还比较少,我个人的笔记本上安装了FEDORA20默认就是用这东西支持启动的。因为使用VINIT贯了觉得很顺手,使用这东西进行个性化配置就有些生疏。也一直没有理解透彻这东西的各种配置文件之间的关系和配置详解,有时候感觉很抓瞎回复 12# niao5929


   
作者: dengbao2001    时间: 2015-03-18 11:45
wait_rabbit 发表于 2015-03-17 18:02
虽然 systemd 引起的争论非常大,但是从个人的角度来看,还是很支持 systemd 的使用和推广的。

1 对于 ...


去年发布这个文章 http://www.ibm.com/developerwork ... ng_init3/index.html 。还是很值得看一看的
作者: dengbao2001    时间: 2015-03-18 11:46
红帽7这个版本,已经全面步入 了SYSTEMD,如果要熟悉SYSTEMD的,还是必须要用的SYSTEMD的相关命令参数

据说SYSTEMD的开发人员很多被红帽招入麾下,所以红帽推SYSTEMD是理所当然的
作者: niao5929    时间: 2015-03-18 11:50
我就是像搞清楚命令的内部机制,在VINIT下脚本可以非常方便的创建,在SYSTEMD下是一头雾水呀。SYSTEMD本身也和DOCKER之类的根前端的应用结合的很紧密。这些是我最想了解和熟悉的哦。回复 16# dengbao2001


   
作者: 择天记    时间: 2015-03-18 12:19
对我来说是天书
作者: chenyx    时间: 2015-03-18 14:00
据说Ubuntu要在15.04里面使用Systemd,如果真是那样的话,就得学习systemd了。
Systemd对比以前的Init方式,感觉最大的改进就是并行启动服务,系统服务启动比较快,另外,与传统的Init方式兼容,也是一大亮点。
从使用Centos7的感觉来看,确实启动速度快了不少。
不过,大家都知道,Linux服务器轻易是不会重启的,所以Systemd带来的启动速度优势可以忽略不计。另外,从4.x内核开始,内核有Hot Patch的功能,使得更新内核都不用重启系统了。
所以,Systemd还是争议很大的项目,对于一般的使用,除了开机启动服务的命令改变了之外,目前没看到很大的区别
作者: dengbao2001    时间: 2015-03-18 14:04
niao5929 发表于 2015-03-18 11:50
我就是像搞清楚命令的内部机制,在VINIT下脚本可以非常方便的创建,在SYSTEMD下是一头雾水呀。SYSTEMD本身也 ...


这也是systemd不好的地方,也是大家争论的地方

例如,当前的日志是文本型的,如果用systemd,他的日志是二进制型的,无法直接观看

建议你看看刚刚网页的链接,对systemd有个原理性的认识

systemd也在改进中
作者: forgaoqiang    时间: 2015-03-18 14:55
本帖最后由 forgaoqiang 于 2015-03-23 13:10 编辑

说起来挺尴尬,最常使用的是Ubuntu Server作为生产环境,有少量的旧版本的CentOS服务器,Ubuntu一开始是极力反对 systemd 的,Ubuntu当前使用的是upstart,两者仍然是竞争关系,因此systemd一直没有在生产环境中实际使用过。

1、SYSTEMD下的自定义脚本如何编写?
现在用的服务器均为Ubuntu 12.04,也就是主要是 init.d 这种方式的管理,当然也支持 upstart jobs 这种,对于systemd 脚本编写只要参考下面图就可以了,感觉作者画的很清楚,可以帮助用户对比下不同的管理系统的使用区别。


虽然内在的工作原理相差甚大,但是外在的整体用法感觉和systemv没有太大的区别,非常容易上手,比如对freeradius这个AAA服务进行简单的启动/停止/状态查询/开机自启/开机禁止自启动 等操作:
  1. #查看freeradius的服务状态
  2. systemctl status freeradius
  3. #启动Freeradius服务
  4. systemctl start freeradius
  5. #开机启动freeradius
  6. systemctl enable freeradius
  7. #禁止开机自启动freeradius
  8. systemctl disable freeradius
复制代码
既然基本命令可以这么写,可以更换一些控制方法,以前的脚本就可以复用了。现在systemd接管了整个系统和服务的管理,可以使用 自定义 unit 文件进行管理,比如ssh服务的service文件脚本可以这么写
  1.   [Unit]
  2.   Description=OpenSSH server daemon
  3.   [Service]
  4.   EnvironmentFile=/etc/sysconfig/sshd
  5.   ExecStartPre=/usr/sbin/sshd-keygen
  6.   ExecStart=/usrsbin/sshd –D $OPTIONS
  7.   ExecReload=/bin/kill –HUP $MAINPID
  8.   KillMode=process
  9.   Restart=on-failure
  10.   RestartSec=42s
  11.   [Install]
  12.   WantedBy=multi-user.target
复制代码
2、各种/lib/systemd/system/下的service、socket文件中的具体配置的意义和关系?
系统初始化需要做很多的工作,需要启动后台服务,比如启动 sshd 服务、配置文件,比如挂载文件系统。整个过程被抽象出unit配置单元,对应的service、socket都是不同类型的配置单元。
service :代表的是一个后台的服务进程,比如 radiusd这样的服务进程,就是daemon,这肯定是最常用的一种类型。
socket :此类配置单元封装系统和互联网中的一个 套接字 。现在systemd能够支持流式、数据报和连续包的 AF_INET、AF_INET6、AF_UNIX socket 。每一个套接字配置单元都有一个相应的服务配置单元 。相应的服务在第一个"连接"进入套接字时就会启动。
每一个配置单元都有自己对应的配置文件,所谓的配置脚本就是管理员写的对应的配置文件。比如MySQL服务的mysql.service,这样直接在这个文件中编写脚本即可,而system v中需要配置好多的地方,特别是不同的启动级别,这里systemd做的非常的好。


3、systemctl命令执行机制的详细过程。
systemctl 作为systemd的管理工具,视乎是融合了service以及chkconfig 的功能,看了下官方的介绍,这里面多出了一个新的名词 cgrous(Control groups 控制组),能够分层次安排进程任务组。通过systemd,当一个进程fork其它进程时,这些子进程会被自动变成父进程控制组的成员,这样一来就能够避免继承时候发生混乱,导致父进程无法有效管理子孙进程等问题。
systemd主要从解决 Socket依赖和D-Bus以及文件系统依赖来解决并发启动问题,

发现一篇极好的关于systemd的讲解文章,在IBM技术文档库上面:
浅析 Linux 初始化 init 系统,第 3 部分: Systemd


作者: niao5929    时间: 2015-03-18 16:22
假如系统崩溃了要查看日志,不知道救援模式进去能不能看到日志的具体内容。以前是文本,救援模式进去就可以直接看的回复 20# dengbao2001


   
作者: dengbao2001    时间: 2015-03-18 16:33
niao5929 发表于 2015-03-18 16:22
假如系统崩溃了要查看日志,不知道救援模式进去能不能看到日志的具体内容。以前是文本,救援模式进去就可以 ...


没实际用过呢


作者: lemoncandy    时间: 2015-03-18 19:59
现在用systemd的系统多了么?

debian貌似还没有用啊,只是ubuntu开始叛变了
作者: niao5929    时间: 2015-03-19 08:12
debian在8.0的时候也会开始使用SYSTEMD了。为此DEBIAN技术委员会进行过投票,结果SYSTEMD以微弱优势胜出回复 24# lemoncandy


   
作者: amarant    时间: 2015-03-19 08:16
本帖最后由 amarant 于 2015-03-19 08:17 编辑

我想知道,用systemd后,sysvinit软件包中的命令还能使用吗?
作者: niao5929    时间: 2015-03-19 08:37
可以用吧。不过好像很多东西都不太一样了。比如SVSINIT中启动级别用的是/etc/inittab来进行修改。可是在RHEL7系列中配置文件在,打开一看就不是那么回事了。回复 26# amarant


   
作者: tooku    时间: 2015-03-19 08:44
支持支持,虽然还没开始学

作者: heguangwu    时间: 2015-03-20 09:11
说句实话,我还是在用initd方式,当用习惯之后也不觉得systemd有什么特别吸引我的地方,另外systemd我也不是很懂
作者: milujite    时间: 2015-03-20 16:58
本帖最后由 milujite 于 2015-03-20 17:14 编辑
chenyx 发表于 2015-03-18 14:00
据说Ubuntu要在15.04里面使用Systemd,如果真是那样的话,就得学习systemd了。
Systemd对比以前的Init方式 ...


启动速度是一回事,CGROUP和SYSTEMD配合的很好,通过SYSTEMD的SERVICE UNIT文件,可以很方便使用cgroup限制服务对系统资源的使用。这也是优势吧。而且对进程的跟踪,SYSTEMD也做的比INIT好,systemctl status XXX,很直观的可以看到相关进程和CGROUP的信息。

还有autofs、mount之类的,都进入systemd了。区别还是很大的,systemd的功能比init多好多。看了RHEL7的资料,也就了解了些皮毛。SOLARIS以前貌似也是INIT来启动,现在也是类似SYSTEMD的方式启动系统。这点,感觉RHEL这几年很多东西在学SOLARIS,btrfs学solaris的zfs,SYSTEMD学SOLARIS的启动。DOCKER/LXC学SOLARIS的ZONE。

作者: milujite    时间: 2015-03-20 17:00
niao5929 发表于 2015-03-19 08:37
可以用吧。不过好像很多东西都不太一样了。比如SVSINIT中启动级别用的是/etc/inittab来进行修改。可是在RHE ...


systemctl set-default xxx.target等于修改/etc/inittab
systemctl isolate xxxx.target等于init runlevel
作者: milujite    时间: 2015-03-20 17:01
amarant 发表于 2015-03-19 08:16
我想知道,用systemd后,sysvinit软件包中的命令还能使用吗?


可以用,但不建议,直接启动init脚本会导致systemd可能监控不到进程状态。
作者: milujite    时间: 2015-03-20 17:01
niao5929 发表于 2015-03-18 16:22
假如系统崩溃了要查看日志,不知道救援模式进去能不能看到日志的具体内容。以前是文本,救援模式进去就可以 ...


可以设置journalctl的参数,让他写到message里。
作者: milujite    时间: 2015-03-20 17:03
niao5929 发表于 2015-03-18 11:50
我就是像搞清楚命令的内部机制,在VINIT下脚本可以非常方便的创建,在SYSTEMD下是一头雾水呀。SYSTEMD本身也 ...


写一个service unit的难度比写init脚本容易太多了,不会SHELL脚本都可以很容易写一个出来。
作者: wjydlut    时间: 2015-03-20 17:14
研究这个有什么用?
作者: niao5929    时间: 2015-03-20 17:14
谢谢回复 33# milujite


   
作者: niao5929    时间: 2015-03-20 17:15
当然有用了。系统到底干什么都可以通过SYSTEMD进行管理和配置的。回复 35# wjydlut


   
作者: niao5929    时间: 2015-03-20 17:16
现在你在用chkconfig来管理服务已经开始不起作用了回复 37# niao5929


   
作者: 睿智2012    时间: 2015-03-21 13:35
新的东西,还要不会啊,等高手
作者: forgaoqiang    时间: 2015-03-22 10:18
一起总以为是技术原因很多人推 systemd ,看样子商业原因才是主要的 (⊙﹏⊙)b

dengbao2001 发表于 2015-03-18 11:46
红帽7这个版本,已经全面步入 了SYSTEMD,如果要熟悉SYSTEMD的,还是必须要用的SYSTEMD的相关命令参数

据 ...

作者: forgaoqiang    时间: 2015-03-22 10:19
是呀 这个就是传说中的 depracated 功能,不建议使用了

milujite 发表于 2015-03-20 17:01
可以用,但不建议,直接启动init脚本会导致systemd可能监控不到进程状态。

作者: niao5929    时间: 2015-03-22 11:41
也不完全是商业,这东西很早的时候ARH LINUX就开始使用了。最开始在技术社区里被关注的。之后就是那种比较激进的社区版像ARH LINUX就开始使用并不断完善了。其实主要还是上端的大牛们都比较爱玩这个启动器。所以它本身在社区里就已经非常出色的啦。呵呵。不过这东西不符合UNIX的模块化理念是比较让人担心回复 40# forgaoqiang


   
作者: forgaoqiang    时间: 2015-03-22 14:33
哈哈 先恭喜一下 据说RHCE7 和之前5/6考试不太一样 不知道好不好搞 今年也想考一个

qq58945591 发表于 2015-03-18 00:23
说来惭愧,虽然学的是RHEL7,但红帽的教材里也没有详细的说明。也许是我懒得看吧。只是觉得它暂时就是替代s ...

作者: niao5929    时间: 2015-03-22 15:12
Systemd 提供了比 UpStart 更激进的并行启动能力,采用了 socket / D-Bus activation 等技术启动服务。一个显而易见的结果就是:更快的启动速度。--引自:http://www.ibm.com/developerwork ... ng_init3/index.html
不知道有没有高人给详细讲讲 "socket / D-Bus activation 等技术启动服务"到底包含那些技术细节。
作者: 18829291269    时间: 2015-03-22 16:38
不懂  正在学习linux中  ,求送书
作者: RPM智能涂料    时间: 2015-03-23 09:00
无聊,凑个热闹吧,捧捧人气也好
作者: dengbao2001    时间: 2015-03-23 10:06
forgaoqiang 发表于 2015-03-22 10:18
一起总以为是技术原因很多人推 systemd ,看样子商业原因才是主要的 (⊙﹏⊙)b


二者皆有之
作者: forgaoqiang    时间: 2015-03-23 13:12
大概就是说底层技术多牛多牛 虽然systemd有各种优点 但是历史遗留问题是重点 虽然知道systemd不错 但是需要新的学习成本

PS:我其实还在用 system 5 的 。。。

heguangwu 发表于 2015-03-20 09:11
说句实话,我还是在用initd方式,当用习惯之后也不觉得systemd有什么特别吸引我的地方,另外systemd我也不是 ...

作者: fengzhanhai    时间: 2015-03-23 14:27
还需要适应过程,猛然过渡到7感觉很不习惯,总结如下几点:
1、在7之前的版本的命令,很多都没法用了,感觉很不习惯
2、感觉linux的systemctl管理方式趋向于unix aix系统的smit工具
3、在性能表现上比之前的版本的确有很大提升
如果在操作习惯上能兼容上一代版本的产品就更棒了
作者: forgaoqiang    时间: 2015-03-24 15:21
嗯 向后兼容是挺蛋疼的 这次关键是整个原理和过程都换了 基本上没办法兼容了 差不多就和windows xp升级win 7差不多,操作习惯变化很大,学习成本较高

只不过估计对于linux用户来说可能压力没有那么大,因为linux用户本身就是比较高级的用户,喜欢一些新的事物~

fengzhanhai 发表于 2015-03-23 14:27
还需要适应过程,猛然过渡到7感觉很不习惯,总结如下几点:
1、在7之前的版本的命令,很多都没法用了,感觉 ...

作者: fengzhanhai    时间: 2015-03-24 15:42
回复 50# forgaoqiang
楼主,很是活跃嘛~~分析的有一定的道理,但是对于我们这些老运维之前积累的经验可能废了大半部分~而今只能从头迈了~

   
作者: forgaoqiang    时间: 2015-03-24 15:57
这就是咱们IT行业的悲剧问题 好多技术还没学成就已经被淘汰了 果然还是干一行恨一行

Novell netware的操作系统在企事业单位当年那么吃香 现在也淘汰的差不多了
MFC 也只热了一段时间,最后微软自己都不看好
wap网站技术热了没两年淘汰的差不多了

额 其实我之前一直都是用Ubuntu server的,这个变化的确很挺蛋疼的


fengzhanhai 发表于 2015-03-24 15:42
回复 50# forgaoqiang
楼主,很是活跃嘛~~分析的有一定的道理,但是对于我们这些老运维之前积累的 ...

作者: fengzhanhai    时间: 2015-03-24 17:33
是的呀,貌似IT行业相比传统行业技术的更新来的更快,一天不学习可能技术就过时了的感觉
作者: ccjsj1    时间: 2015-03-24 23:23
讨论话题
1、systemd下的自定义脚本如何编写?
systemd自定义脚本普通用户最经常碰到的应该是Service unit写法其实我觉得比init脚本还容易,自定义功能也比init脚本要丰富很多,就算你不会写SHELL脚本,你也可以轻松使用systemd Service unit编写语法很快写一个服务的启动文件。下面是启动node例子:

[Unit]
Description=pano - main site of site_name.com
Documentation=http://www.site_name.com/docs/

[Service]
ExecStart=/usr/local/bin/node /www/www.site_name.com/node/bin/www
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nobody
User=nobody
Group=nobody
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

# systemctl enable pano
# systemctl start pano


2、各种/lib/systemd/system/下的Service、Socket文件中的具体配置的意义和关系?Service和Socket的的关系应该不是通过unit配置文件建立的,除了某些Service的unit文件定义Also=xxx.Socket字段,这情况下systemctl enable/disable的时候会将Socket文件一起复制到target目录。

systemd也类似这样,他预先创建进程需要的Socket,通过Linux进程的继承等机制,将套接字传递给新的服务进程,这样服务启动时就可以不再创建这些进程,而另外依赖这些Socket的服务也可以在依赖的服务还未启动时就启动完成。

使用init的情况下,假设A.Service启动创建了A.Socket,而B.Service启动依赖A.Socket,这种情况下,B.Service只能等A.Service启动完成后才能启动。

使用systemd的情况下,systemd先创建A.Socket,再通过fork或者exec启动A.Service和B.Service。这样A.Service和B.Service都可以同时启动。

同理,systemd情况下,dbus、文件系统等依赖关系也是通过这样打破的,因此可以实现一些服务的并行启动,减少系统启动时间。


3、systemctl命令执行机制的详细过程。systemctl只是一个控制命令,和chkconfig、service命令功能类似。
systemd是一个替代init的进程,init根据rcx.d里的脚本顺序,执行启动/关闭服务。而systemd使用Linux进程的继承等机制,解决依赖问题,巧妙的实现了并行启动,大大提升启动速度。但是Systemd和init的区别不仅仅是启动快这么简单,和cgroup的结合,systemd-cgls、systemd-cgtop不仅服务跟踪管理起来更方便,也可以直接在systemd service unit里设置cgroup的的内存、cpu等限额功能。
作者: securitypluscn    时间: 2015-03-27 10:23
本帖最后由 securitypluscn 于 2015-03-27 10:29 编辑

用CENTOS7小半年了。启动速度越来越慢。 我刚刚用秒表测过。 足60秒。i3 6G的硬件。
作者: forgaoqiang    时间: 2015-03-27 14:31
哈哈 与此同时window 10速度却快的吓人 我从bios完成之后只需要3~5秒就起来了

据说systemd的启动速度也是这样的 几秒就能完成同步启动 window还是伪装的启动 实际是从 休眠 醒过来而已 并没有从零加载

PS:俺用的是固态硬盘的说

securitypluscn 发表于 2015-03-27 10:23
用CENTOS7小半年了。启动速度越来越慢。 我刚刚用秒表测过。 足60秒。i3 6G的硬件。

作者: niao5929    时间: 2015-03-27 17:26
回复 58# gurongyong


   
作者: securitypluscn    时间: 2015-07-05 23:30
forgaoqiang 发表于 2015-03-27 14:31
哈哈 与此同时window 10速度却快的吓人 我从bios完成之后只需要3~5秒就起来了

据说systemd的启动速度也 ...


我的CENTOS7现在也用休眠模式启动。快多了
记得以前FEDORA是提倡用休眠模式的
  1. systemctl hibernate
复制代码

作者: niao5929    时间: 2015-07-06 08:19
我发现在本地系统中一般用户也可以使用命令将主机睡眠。不知道这算不算安全问题。如果是一般用户通过远程登陆到主机,将系统休眠,那作为服务器系统是蛮可怕的。不知道是否可以将所有类似命令权限提升给管理员账户呢??回复 57# securitypluscn


   
作者: securitypluscn    时间: 2015-07-13 01:52
本帖最后由 securitypluscn 于 2015-07-13 02:01 编辑
niao5929 发表于 2015-07-06 08:19
我发现在本地系统中一般用户也可以使用命令将主机睡眠。不知道这算不算安全问题。如果是一般用户通过远程登 ...


安全不安全,取决于你制定的安全策略,如果你的安全策略允许就不是问题。
用SUDO或更改文件执行权限就可以了。





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2