简介

在centos5中生成和管理用户空间中的进程以及完成系统的初始化使用的是init,并且是依次启动。在centos6中则是使用的upstart,在一定程度上实现了并行启动,但是仍然存在依赖关系,到了centos7中开始使用systemd,真正的实现并行启动、延时按需启动。

systemd的特性

1 启动系统的过程中实现了并行启动

2 由systemd所管理的服务可以实现按需激活

3 支持系统服务状态快照

4 可以定义程序之间依赖关系

unit介绍

unit的配置文件是uit的核心,在配置文件中主要包含

1. 需要管理服务或者程序

2. 服务或者程序需要监听的套接字

3. 保存的系统快照(就是制作快照的时候,系统中各个服务的状态)

4. 其他和init相关的配置

unit配置文件的位置

/lib/systemd/system         本地配置的系统单元

/run/systemd/system         运行时配置的系统单元

/usr/lib/systemd/system      第三方软件的系统单元(sshd,nginx..)

注意:unit(单元)和init中的服务脚本类似,但是不相同

unit的多种类别

 类型1:service unit,这是服务类型的unit,该类unit后缀是  .service,比如nginx.service,通过这个nuit可以实现启动、关闭、查看状态等
该类unit位于 /usr/lib/systemd/system
注意:unit本质上来说并不是脚本,而仅仅是systemd一个配置文件,因此这个unit文件不具有执行权限,而且也无法执行
启动服务的方式:通过让systemd去读取配置文件中的内容,完成nginx进程的启动
类型2:device unit,这是设备unit,该类unit的后缀是.device,这类unit的作用是用来识别设备文件
类型3:mount unit,后缀 .mount,用来实现挂载文件系统到指定的挂载点
类型4:socket unit,后缀.socket,用来表示进程间通信的socket文件
类型5:snapshot nuit:快照unit,后缀.snapshot, 用来管理快照
类型6:target unit:目标unit,后缀是 .target,模拟centos5、6上的运行级别(主要是为了向后兼容)
类型7:swap unit
类型8:path unit

systemd的特性

 特性1. 基于socket的激活机制
在启动系统的时候,systemd会将所有要启动的服务都标记已经启动,标记的方式就是将所有要启动的服务的套接字都监听起来,但是是由systemd自己来监听,而不是让具体的服务自己来监听,这样就解决了进程之间的依赖关系。
当某个套接第一次被用户的访问的时候,systemd会立刻启动这个套接字所对应的进程,然后将这个套接字和这个启动的服务做绑定
特性2:基于bus机制激活
特性3:基于device机制激活
特性4:基于path机制激活
可以让systemd监控某个某个目录,当目录中的文件发生更改的时候,立刻激活某个服务
特性5:支持快照机制
特性6:支持域兼容sysV风格的服务管理脚本

systemctl使用举例

1.查看激活的服务

     查看当前系统中全部已经被激活的unit:systemctl list-units --type service
查看当前系统中全部的unit(包括未激活的):systemctl list-units --type service --all

 2.开机自启动关闭

     设置某个服务开机自启动:systemctl enable nginx.service
禁止某个服务开机自启动:systemctl disable nginx.service
【设置开机自启动,其实就是在/etc/systemd/system/multi-user.target.wants/下创建执行/usr/lib/systemd/system/下的配置文件的软连接】 查看当前系统中的全部unit的自动启动情况:systemctl list-unit-files
state
disabled:禁止开机自动启动
enabled:开机自动启动
static:该unit不能独立运行,是其他unit所依赖的

 3.查看是否自启动

     查看指定的服务是否开机自动启动
systemctl list-unit-files | grep nginx.service
systemctl list-unit-files nginx.service
systemctl is-enabled nginx.service
查看一个unit的依赖关系:systemctl list-dependencies nginx.service
优先用reload,如果无法让修改生效,才执行restart:systemctl reload-or-restart nginx.service

 4.禁止使用enable

     禁止用enable让某服务开机自启动:systemctl mask nginx.service
解除禁止mask功能:systemctl unmask nginx.service 注意:所有的.service可以省略

 5.切换级别

     systemctl使用举例-
切换级别:systemctl isolate name.target 切换到的救援模式(级别):systemctl rescure.tartet <<< 切换到救援模式不需要用isolate

 6.查看默认级别

1     查看系统默认的运行级别:systemctl get-default
查看当前系统可用的target:systemctl list-units --type target
修改系统默认运行级别:systemctl set-default name.target

unit的文件的基本构成

第一部分:unit,用于记录该unit文件的一些通用信息

第二部分:service,记录service具体信息(如何启动、配置文件位置...)

第三部分:install,记录安装信息(运行级别)

 第一部分:Unit部分
)Description:对该服务的一个简要说明
)Before:定义启动顺序,例子:Before=nginx.service,表示该服务需要在nginx启动之前启动
)After:定义启动顺序,同上
)Documentation:帮助文档
)Wants:建议同时启动某服务,比如:Wants=nginx.service 表示系统中最好启动nginx服务,但是即使不启动nginx,当前这个服务也没啥影响
)Require:当前服务是需要哪个特定的服务的,比如:Require=nginx.service,这就表示当前服务是需要nginx服务,那么在启动当前这个服务的时候,会自动将nginx也启动起来;而且一旦发现nginx服务停止了,那么当前这个服务也就会自动停止
【require无法指定启动次序,需要结合Before After来用,否则经常出现各种问题】
)Conflicis:当一个服务启动的时候,会立刻停止与之相冲突的服务 第二部分:Service部分
)Type:指定service的类型
类型1:oneshot:程序执行完成就自动结束了,没有后台进程,比如执行一个shell
类型2:forking:需要一个后台守护进程一直在运行,比如运行nginx、apache、sshd
)ExecStart:指定如何启动服务(指定启动服务要执行的命令)
如果服务类型是oneshot类型,那么可以直接写上他要执行命令即可,通常不能添加参数和选项
如果服务类型不是oneshot类型,那么在写要执行的命令的时候,可以添加一些参数,比如指定选项、配置文件、用户
【如果要执行多个命令,那么多个命令之间用;分割,如果需要换行可以用 \ 来续行】
)ExecStartPre, ExecStartPost:指定在执行启动服务之前、之后要执行什么命令
)ExecStop:停止服务
)Restart:
)PIDFile:指定pid文件的路径
第三部分:install部分
WantedBy:指定运行级别,WantedBy=multi-user.target

案例:编写unit文件,并注册到systemd服务中

     第一步:准备一个shell脚本
# vim /root/name.sh
#!/bin/bash
echo `hostname`>/tmp/name.log 第二步:创建unit文件
# vim my.service
[Unit]
Description=this is my first unit file [Service]
Type=oneshot
ExecStart=/bin/bash /root/name.sh [Install]
WantedBy=multi-user.target # mv my.service /usr/lib/systemd/system 第三步:将我的unit文件注册到systemd中
# systemctl enable my.service 第四步:查看该服务的状态
# systemctl status my.service

扩展

1.grub2的配置文件-/etc/default/grub 

     # 指定用户选择菜单超时时间
GRUB_TIMEOUT= # 指定菜单中的描述名称
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" # GRUB指定哪个是默认的title
# save表示会保存当前的配置,需要结合一个内置变量来使用
GRUB_DEFAULT=saved # 禁用子菜单
GRUB_DISABLE_SUBMENU=true # 指定将启动过程中的信息输出到终端
GRUB_TERMINAL_OUTPUT="console" # 在启动系统的时候,以命令行的方式向内核传递参数
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb " # 指定是否显示启动过程信息
GRUB_DISABLE_RECOVERY="true"

2.定制grub2的配置文件

1     第一步:备份原有的grub.cfg
# cp /boot/grub2/grub.cfg{,.bak} 第二步:修改/etc/default/grub 第三步:重新生成grub.cfg
# grub2-mkconfig>/boot/grub2/grub.cfg

3.CentOS7忘记密码解决方法

         进入紧急救援模式
进入方式:在启动系统的时候,编辑内核选项,添加 rd.break,然后按ctrl+x
进入救援模式后:
. 根在 sysroot 下
. 当前是只读权限 操作:
# mount -o remount,rw /sysroot
# chroot /sysroot
# passwd
xxx
xxx
# exit
# reboot

进入救援模式方法

1 概述

要使得linux进入救援模式,原则其实就是一个,通过光盘启动模式进入,所以,就要想办法让机器能从光盘启动。

本文主要模拟了Vmware下的操作。如果是真实机器,操作前将光盘插入机器里即可

2 CentOS6

首先在重新开机时当出现下面这个接界面时按esc进入到Boot Menu。(ps:如果是虚拟机,要提前按一下鼠标,按鼠标模式是在虚拟机内操作,不是本地机器的操作,然后,手速要快,在进度条满之前按,只能按一下,按多了也进不去)

备注:这里如果按F2进入BIOS然后在设置光盘启动项为第一项也是可以,但是不推荐,因为还要改回来,要不然每次都是光盘第一启动,很麻烦

上下键选择第三项CD-ROM Drive,光盘启动

再选择第三项救援模式

选择语言,默认English就行

选择No跳过网口检测

点击继续

这里提示我们,救援模式下的根目录不是我们以前的根目录,而/mnt.sysimage这个目录才是我没以前的根目录,如果想要变回以前的根目录需要执行chroot /mnt/sysimage命令

再一次提示我们根目录的问题

这时候选择开启shell进程,这样我们就可以使用命令了。

3 CentOS7

centOS7进入图一 troubleshooting有两个方法

方法一

首先在重新开机时当出现下面这个接界面时按esc进入到Boot Menu。(ps:如果是虚拟机,要提前按一下鼠标,按鼠标模式是在虚拟机内操作,不是本地机器的操作,然后,手速要快,在进度条满之前按,只能按一下,按多了也进不去)

上下键选择第三项CD-ROM Drive,光盘启动

方法二

虚拟机开机按F12--》c-->输入exit --》

以上两个方法都可以进入troubleshooting页面,接下来步骤一样

图一 选择troubleshooting --> 图二 选择Rescue,等待加载--》选择 选项1,等待一会儿,按enter,就可以进入救援模式

图一 选择troubleshooting

图二 选择Rescue

systemd服务详解-技术流ken的更多相关文章

  1. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  2. iptables实战案例详解-技术流ken

    简介 关于iptables的介绍网上有很多的资料,大家可以自己找一些关于iptables的工作原理,以及四表五链的简介,对于学习iptables将会事半功倍.本博文将会例举几个工作中常用的iptabl ...

  3. NTP时间服务器实战应用详解-技术流ken

    简介 在搭建集群服务中,要保证各节点时间一致,NTP时间服务器就成为了一个好帮手了. 系统环境 系统版本:centos6.7 服务器IP:10.220..5.166/24 客户端IP:10.220.5 ...

  4. 实战!基于lamp安装wordpress详解-技术流ken

    简介 LAMP 是Linux Apache MySQL PHP的简写,其实就是把Apache, MySQL以及PHP安装在Linux系统上,组成一个环境来运行动态的脚本文件.现在基于lamp搭建wor ...

  5. KVM虚拟化使用详解--技术流ken

    KVM介绍 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. KVM的虚拟化需要硬件支持 ...

  6. cobbler批量安装系统使用详解-技术流ken

    前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 系统环境准备及其下载cobbler ...

  7. samba企业级实战应用详解-技术流ken

    1.简介 Samba是一套使用SMB(Server Message Block)协议的应用程序, 通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为 ...

  8. pxe+kickstart自动化批量安装系统详解-技术流ken

    前言 pxe+kickstart是一款可以实现自动化批量安装系统的服务,比较经典,下面将详细介绍此服务的安装和使用. 系统环境准备 系统版本:CentOS release 6.7 (Final) 内网 ...

  9. xshell连接虚拟机详解--技术流ken

    xshell连接虚拟机 第一步:网络模式更改为桥接模式 第二步:重启网络 [root@ken1 ~]# systemctl restart network 第三步:获取IP地址 输入命令ip a 第四 ...

随机推荐

  1. CSS伪类的理解

    因为之前一直对css伪类没有过多的了解,在网上看到一段css代码,不能理解 a:hover span.title{ color:red; ......... } 现通过查询css手册,其实css伪类只 ...

  2. FPGA开发随笔汇总

    点击标题即可进入相关随笔. DE-SOC开发板VrilogHDL开发相关部分: (本过程需要Verilog HDL 的基本语言基础) 1.FPGA的发展史及FPGA 的基础架构 2.首先看一下友晶DE ...

  3. Exp2 后门原理与实践-------20164325王晓蕊

    Exp2 后门原理与实践 任务一:使用netcat获取主机操作Shell,cron启动 1.windows获取linux shell 1.1 ipconfig  查看本机查看以太网适配器(8)的ipv ...

  4. 6-使用requests库封装类处理get/post请求

    1.request安装 1)pip安装,直接pip install requests 2)下载离线包安装,加压后,命令行进入路径,执行python setup.py install 2.创建工程 注意 ...

  5. LVS负载均衡简单配置

    一.简单介绍 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtu ...

  6. java.lang.OutOfMemoryError: PermGen space (jvm内存泄漏解决办法)

    2.在myeclipse根目录 打开myeclipse.ini 3.在myeclipse中配置内存

  7. Nuget4.0 bug一粒

    这个锅到底是nuget的还是msbuild的我也不是很确定 在使用Nuget4.0打包编译项目时 当执行到nuget pack %%~dpna.csproj -build -Prop Configur ...

  8. 【高速接口-RapidIO】3、RapidIO串行物理层的包传输过程

    一.引言 前几篇文章已经谈到RapidIO的协议,串行物理层与控制符号. RapidIO协议包括读事务(NREAD),写事务(NWRITE),流写事务(SWRITE),有响应的写事务(NWRITE_R ...

  9. 吴恩达机器学习笔记40-用调和平均数F来进行查准率和查全率之间的权衡(Trading Off Precision and Recall by F sore)

    在很多应用中,我们希望能够保证查准率和查全率的相对平衡. 我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同: 我们希望有一个帮助我们选择这个阀值的方法.一种方法 ...

  10. JDK设计模式之—单例模式和static关键字

    首先了解static 关键字 static声明的方法是静态方法,static声明的成员变量为静态成员变量.对于该类的所有对象来说,static的成员变量和static只有一份存储空间 即使没有创建该类 ...