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

相关推荐

  • corosync+pacemaker+drbd+mysql配置安装详解

    一,  基本环境介绍及基本环境配置 节点1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬盘 节点2: node1.hulala.com      192.168.1.36…

    Linux干货 2016-05-08
  • Linux哲学思想以及自己的理解

    Linux哲学思想: #1 一切接文件 #2  单一目的小程序 #3 组合小程序完成复杂任务 #4 文本文件保存配置信息 #5 尽量避免捕获用户接口 #6 提供机制,而非策略 自己的理解:(玩Linux时间比较短,没什么太深刻的理解) #1 一切皆文件 我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件,我们可以…

    Linux干货 2016-08-15
  • 推荐-zabbix原理篇(1)

    zabbix原理篇(1) 介绍zabbix 之前让我们先来熟悉一下什么snmp ☺ SNMP:Simple Network Management Protoclol  翻译一下:简单网络管理协议 SNMP的工作模式是啥 ☺ NMS向agent采集数据 agent向NMS报告数据 NMS请求agent修改配置 SNMP组件…

    Linux干货 2016-04-11
  • N21天天第十二周课程练习

    1、请描述一次完整的http请求处理过程; 1、建立TCP连接 2、Web浏览器向Web服务器发送请求 3、Web浏览器发送请求头信息   建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME   信息包括请求修饰符、客户机信息和可能的内容 4、Web服务器应答…

    Linux干货 2016-10-31
  • Linux权限基本介绍,管理

     Linux权限机制采用UGO模式。其中 u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。 u、g、o 都有读(read)、写(write)、执行(excute) 三个权限,所以UGO模式是三类九种基本权限。         用命令 ls …

    Linux干货 2017-07-22
  • Linux 文件系统上的权限

    文件系统上的权限是指文件系统上的文件和目录的权限,由于Linux是一种多用户的操作系统,而且允许同一时间登录多个用户操作,所以我们就需要一定的管理机制来对限定不同用户对同一文件或目录的操作权限。 文件系统上的权限主要针对三类对象(访问者)进行定义: owner:属主 u; g 属组 group; o: 其它 other 每个文件针对每类访问者都定义了三种权限…

    2017-06-04