systemd和systemctl

systemd和systemctl(centos7)    

Systemd是一种新的linux系统服务管理器。它替换了init系统,能够管理系统启动过程和一些系统服务,一旦启动起来,就将监管整个系统。在centos7系统中,PID 1被systemd所使用了:如下,在centos6中:

init─┬─NetworkManager

     ├─abrtd

     ├─acpid

     ├─atd

     ├─auditd─┬─audispd─┬─sedispatch

     │        │         └─{audispd}

     │        └─{auditd}

     ├─automount───4*[{automount}]

     ├─certmonger

     ├─crond

     ├─cupsd

     ├─dbus-daemon───{dbus-daemon}

     ├─dhclient

     ├─fcoemon

     ├─hald─┬─hald-runner─┬─hald-addon-acpi

     │      │             └─hald-addon-inpu

     │      └─{hald}

     ├─irqbalance

     ├─lldpad

     ├─master─┬─pickup

     │        └─qmgr

     ├─mcelog

     ├─6*[mingetty]

     ├─modem-manager

     ├─rpc.statd

     ├─rpcbind

     ├─rsyslogd───3*[{rsyslogd}]

     ├─sshd─┬─sshd───bash───pstree

     │      └─sshd───bash

     ├─udevd───2*[udevd]

     ├─wpa_supplicant

     └─xinetd

在centos7中

systemd─┬─abrt-watch-log

        ├─abrtd

        ├─agetty

        ├─atd

        ├─auditd───{auditd}

        ├─chronyd

        ├─crond

        ├─dbus-daemon───{dbus-daemon}

        ├─irqbalance

        ├─lsmd

        ├─lvmetad

        ├─master─┬─pickup

        │        └─qmgr

        ├─rngd

        ├─rsyslogd───2*[{rsyslogd}]

        ├─smartd

        ├─sshd───sshd───bash───pstree

        ├─systemd-journal

        ├─systemd-logind

        ├─systemd-udevd

        └─tuned───4*[{tuned}]

ststemd可以并行地启动系统服务进程,并且最初仅启动确实被依赖的服务,极大减少了系统的引导时间,这也就是为什么centos7系统启动速度比centos6快许多的原因了。

一、知识整理

1、systemd的管理体系里,以前的运行级别的概念被新的运行目标(target)所取代。tartget的命令类似于multi-user.target等这种形式,由于不再使用runlevel概念,所以/etc/inittab也不再被系统使用。而在systemd的管理体系里面,默认的target(相当于以前的默认运行级别)是通过软链接实现的:

[root@localhost system]# ll
总用量 8
drwxr-xr-x. 2 root root   30 7月  19 05:55 basic.target.wants
lrwxrwxrwx. 1 root root  41 9月 19 14:56 default.target -> /usr/lib/systemd/system/multi-user.target

在/lib/systemd/system下面定义runlevelX.target文件目的主要是为了能够兼容以前的运行级别,事实上/lib/systemd/system/runlevel3.target,同样是被链接到multi-user.target

2、systemd管理体系中,被管理的deamon(守护进程)称作unit(单元),对于单元的管理是通过命令systemctl来进行控制的。unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。

3、systemd新特性:

系统引导时实现服务并行启动;

按需启动守护进程;

自动化的服务依赖关系

同时采用socket式与D-Bus总线式激活服务;

系统状态快照。

4、配置文件:

每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

[root@localhost system]# cd /usr/lib/systemd/system
[root@localhost system]# ls
abrt-ccpp.service      lvm2-lvmetad.socket                 smartd.service
abrtd.service            lvm2-lvmpolld.service               snmpd.service
abrt-oops.service        lvm2-lvmpolld.socket                snmptrapd.service
abrt-pstoreoops.service      lvm2-monitor.service                sockets.target

系统执行过程中所产生的服务脚本,比上面目录优先运行:

[root@localhost system]# cd /run/systemd/system/
[root@localhost system]# ls
session-1.scope  session-1.scope.d

管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/SXX类的功能,比上面目录优先运行:

[root@localhost system]# cd /etc/systemd/system/
[root@localhost system]# ls
basic.target.wants  default.target.wants  multi-user.target.wants  sysinit.target.wants
default.target   getty.target.wants    sockets.target.wants     system-update.target.wants

5、unit类型:使用如下命令查看:

[root@localhost system]# systemctl -t help 
Available unit types:

service :文件扩展名为.service,用于定义系统服务

socket :用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动。

busname

target :用于模拟实现运行级别;

snapshot :.snapshot,管理系统快照;

device :.device,用于定义内核识别的设备;

mount :.mount,定义文件系统挂载点

automount :文件系统的自动挂载点

swap :.swap,用于标识swap设备;

timer

path :用于定义文件系统中的一个文件或者目录使用,常用于当文件系统变化时,延迟激活服务,如spool目录。

slice

scope

6、关键特性:

基于socket的激活机制,socket与程序分离;

基于bus的激活机制

基于device的激活机制

基于path的激活机制;

系统快照:保存个unit的当前状态信息与持久存储设备中;

向后兼容sysv init脚本,放在/etc/init.d/

不兼容:systemctl的命令是固定不变的;

非由systemd启动的服务,systemctl无法与之通信。

7、centos的系统启动:

设置内核参数,只影响当次启动:在选择内核界面按e。在linux16一行后添加:

systemd.unit= XXX.target|emergency.target|recure.target

当出现文件系统损坏、挂载文件损坏等情况后,进入emergency模式修复,此模式比rescue模式功能更少。

blob.png

修复grub2:修复配置文件:grub2-mkconfig > /boot/grub2/grub.cfg

grub2-mkconfig  -o  /boot/grub2/grub.cfg

修复grub:grub2-install /dev/sda BIOS环境

grub2-install UEFI环境

一、命令详解和事例

1、systemctl命令:

用法:systemctl [OPT] COMMAND [NAME]…

启动服务:service NAME start = systemctl start NAME.service

停止服务:service NAME stop = systemctl stop NAME.service

重启服务:service NAME restart = systemctl restart NAME.service

服务状态:service NAME status = systemctl status NAME.service

条件式重启,已启动才重启,否则不作操作:service NAME condrestart = systemctl try-restart NAME.service

重载或重启服务,先加载再启动:systemctl reload-or-restart NAME.service

重载或条件式重启:systemctl reload-or-try-restart NAME.service

禁止自动和手动启动:systemctl mask NAME.service

取消禁止:systemctl unmask NAME.service

查看某服务当前激活与否的状态:systemctl is-active NAME.service

查看所有已经激活的服务:systemctl list-unit –type|-t service

查看所有服务:systemctl list-units –type service –all|-a

chkconfig命令的对应关系:

设定某服务开机自启动:

chkconfig NAME on==>systemctl enable NAME.service

设定某服务开机禁止启动:

chkconfig NAME off==> systemctl disable NAME.service

查看所有服务的开机自启动状态:

chkconfig –list==> systemctl list-unit-files –type service

[root@localhost system]# systemctl enable httpd.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost system]# systemctl disable httpd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost system]# systemctl mask httpd.service
Created symlink from /etc/systemd/system/httpd.service to /dev/null.
[root@localhost system]# systemctl unmask httpd.service
Removed symlink /etc/systemd/system/httpd.service.
[root@localhost system]# systemctl list-units --type service 
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  abrt-ccpp.service        loaded active exited  Install ABRT coredump hook
  abrt-oops.service        loaded active running ABRT kernel log watcher
  abrtd.service           loaded active running ABRT Automated Bug Reporting Tool
  atd.service            loaded active running Job spooling tools

列出该服务在哪些运行级别下启用和禁止:

chkconfig sshd -list==>ls /etc/systemd/system/*.wants/sshd.service

查看服务是否开机启动:systemctl is-enabled NAME.service

[root@localhost system]# systemctl is-enabled httpd.service 
disabled

其它命令:查看服务的依赖关系

systemctl list-dependencies NAME.service

杀掉进程:systemctl kill (进程名)

列出失败的任务:systemctl –failed –type=service

2、服务状态:

[root@localhost system]# systemctl list-units --type service --all
  UNIT                LOAD      ACTIVE   SUB     DESCRIPTION
  abrt-ccpp.service       loaded    active   exited  Install ABRT coredump hook
  abrt-oops.service       loaded    active   running ABRT kernel log watcher
  abrt-vmcore.service     loaded    inactive dead    Harvest vmcores for ABRT
  abrt-xorg.service       loaded    inactive dead    ABRT Xorg log watcher

loaded:unit配置文件已处理

active(running):一次或多次持续处理的运行

active(exited):成功完成一次性配置

active(waiting):运行中,等待一个事件

inactive:不运行

enable:开机启动

disable:开机不启动

static:开机不启动,但可以被另一个启用的服务激活。

3、运行级别:

0 :关机:poweroff.target

1 :单用户模式:rescue.target

2 :默认不启用NFS的多用户:multi-user.target

3 :完全的多用户:multi-user.target

4 :保留:mult-user.target

5 :图形:graphical.target

6 :重启:reboot.target

查看依赖性:

[root@localhost system]# systemctl list-dependencies graphical.target 
graphical.target
● ├─display-manager.service
● ├─network.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
●   ├─abrt-ccpp.service
●   ├─abrt-oops.service
●   ├─abrt-vmcore.service

级别切换:systemctl isolate NAME.target;只有当/lib/systemd/system/*.target文件中AllowIsolate=yes才能切换(修改文件需执行systemctl deamon-reload才能生效)。

获取默认运行级别:systemctl get-default。

修改默认运行级别:systemctl set-default NAME.target

切换至救援模式:systemctl rescue

切换至紧急救援模式:systemctl emergency

关机:systemctl halt|poweroff

重启:systemctl reboot

挂起:systemctl suspend

休眠:systemctl hibernate

休眠并挂起:systemctl hybrid-sleep

4、Centos7引导顺序:

UEFI或BIOS初始化,运行POST开机自检

选择启动设备;

引导装载程序,centos7是grub2

加载装载程序的配置文件:/etc/grub.d/  /etc/default/grub  /boot/grub2/grub.cfg;

加载initramfs驱动模块;

加载内核选项;

内核初始化,centos7使用system代替init

执行initrd.target所有单元,包括挂载/etc/fstab

从initramfs根文件系统切换到磁盘根目录;

systemd执行默认target配置,配置文件为/etc/systemd/default.target  /etc/systemd/system

systemd执行sysinit.target初始化系统及basic.target准备操作系统;

systemd启动multi-user.target下的本机与服务器服务;

systemd执行multi-user.target下的/etc/rc.d/rc.local

systemd执行multi-user.target下的getty.target及登入服务;

systemd执行graphical需要的服务。

5、Unit文件格式:

/etc/systemd/system:系统管理员和用户使用;

/usr/lib/systemd/system:发行版打包者使用;

默认单位是秒;通常由三部分组成:

[Unit]:定义与unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系;

常用的选项:Description:描述信息

After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反;

Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit即无法激活;

Wants:依赖到的其它units,弱依赖;

Conflicts:定义units间的冲突关系。

[Service]:与特定类型相关的专用选项;此处为service类型;

常用选项:Type:定义影响ExecStart及相关参数功能的unit进程启动类型;

simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中;

forking:由ExacStart启动的程序透过spawns延伸出其它子程序来作为此deamon的主要服务。原生父程序在启动结束后就会终止。

oneshot:与simple类似,不过这个程序在完成工作后就结束,不常驻内存;

dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。因此通常也要同时设定BusName=才行;

notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让Systemd接收消息;

idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务。

EnvironmentFile:环境配置文件;

ExecStart:指明启动unit要运行命令或脚本的绝对路径;

ExecStartPre:在ExecStart之前运行;

ExecStartPost:在ExecStart之后运行;

ExecStop:指明停止unit要运行的命令或脚本;

Restart:当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动。

[Install]:定义由systemctl enable以及systemctl disable命令在实现服务启动或禁用时用到的一些选项。

Alias:别名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依赖,强依赖;

WantedBy:被哪些units所依赖,弱依赖;

Also:安装本服务的时候还要安装别的相关服务。

二、课后练习

1、为编译安装的httpd服务,实现service unit文件。

编译安装,更改配置文件。在/etc/systemd/system中编辑配置文件:

[root@localhost system]# vim httpd.service
[Unit]
Description=apache2
Requires=atd.service
[Service]
Type=simple
ExecStart=/usr/local/bin/apachectl 
[Install]
WantedBy=multi-user.target

重载并启动:

[root@localhost system]# systemctl daemon-reload 
[root@localhost system]# systemctl start httpd
[root@localhost system]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22        0.0.0.0:*           LISTEN     
tcp        0      0 127.0.0.1:25      0.0.0.0:*            LISTEN     
tcp        0     52 10.1.54.250:22      10.1.252.66:56929       ESTABLISHED
tcp        0      0 10.1.54.250:22     10.1.252.66:57750       ESTABLISHED
tcp6       0      0 :::80        :::*                LISTEN

2、破解centos7root口令:启动时按e进入编辑模式;在linux16行后添加参数rd.break

再按ctrl+x启动。启动后重新按照rw格式挂载sysroot;切换根,更改root密码。在根下创建.autorelabel空文件,使selinux强制检测文件。

blob.png

blob.png

blob.png

3、修改默认的启动内核

在centos7中最好不要修改grub2.cfg文件,先修改/etc/default/grub模板文件;

[root@localhost grub2]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

将GRUB_DEFAULT=saved一行改为0

最后使用grub2-mkconfig > /boot/grub2/grub.cfg命令重新生成grub2.cfg文件。

4、启动时临时禁用SELinux

[root@localhost system]# getenforce 
Enforcing
[root@localhost system]# setenforce 0
[root@localhost system]# getenforce 
Permissive

5、启动时进入emergency模式:

首先进入e模式:

blob.png

linux16后添加:systemd.unit= emergency.target

ctrl+x启动,进入:

blob.png

6、删除编译安装的新内核:

删除boot中生成的文件;

删除grub2/grub.cfg新内核相关几行;

删除/etc/modules中版本号相关文件;

删除编译安装包等文件。

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/49806

(2)
SilencePavilionSilencePavilion
上一篇 2016-10-09
下一篇 2016-10-09

相关推荐

  • 磁盘管理和文件系统

    磁盘结构 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 一切皆文件:open(), read(), write(), close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位“字符”,键盘 设备号码: 主设备号:major number, 标识设备类型 次设备号:minor number, 标…

    Linux干货 2017-04-23
  • Linux文件类型及颜色标示

    在Linux系统中,有多种文件类型,不同的文件类型有不同的颜色。 ls -l 目录,这个命令可以在显示的类容中的第一个位置查看目录里面文件的类型。 Linux下用字符表示的文件类型 -:普通文件 d:目录文件 l:链接文件 b:块设备文件 c:字符设备文件 p:管道文件 同时 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝…

    Linux干货 2016-10-17
  • 管道和用户管理权限

           一周的时间又过去了,感觉过得太快了,但是过得很充实,这就够啦!把在平时的学习中觉得重要有意义的地方记录下来,希望可以对自己以后的学习有所帮助! 1.把/etc/issue转化为大写,并重定向到issue.out. 管道的作用很强大,|将正确的结果重定向给下一条命令;连接命令;一页一页地…

    2017-07-22
  • 磁盘配额的操作步骤

    磁盘配额 操作步骤: 1、创建一个10G的分区 /dev/sdd1并将其格式化,挂载 2、如果是新硬盘便不存在同步问题。旧硬盘得使用命令partx  -a /dev/sdd1 3、临时创建挂载文件夹 /mnt/home    4、将/home/*  mv  到 /mnt/home 中,再将/dev/…

    Linux干货 2016-09-01
  • 第五天03条件判断与循环

           选择执行     选择执行:注意:if语句可嵌套                           单分支       &n…

    Linux干货 2016-08-18
  • 马哥教育网络班21期+第13周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加samba用户gentoo,centos和u…

    Linux干货 2016-10-24