Linux

第八周《简述systemd的新特性及......》

2018-10-10  本文已影响103人  N32_Diamond

一、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理

Systemd概述

1.systemd是一种新的linux系统服务管理器,用于替换init系统,能够管理系统启动过程和系统服务,一旦启动起来,就将监管整个系统。在centos7系统中,PID1被systemd所占用;
2.systemd可以并行地启动系统服务进程,并且最初仅启动确实被依赖的服务,极大减少了系统的引导时间,这也就是为什么centos7系统启动速度比centos6快许多的原因;
3.systemctl 是 systemd 的主命令,用于管理系统及服务

systemd的新特性:
关键特性:(了解systemd的工作)
不兼容:

systemd核心概念:unit

unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
unit单元 文件扩展名 解释说明
Service unit .service 定义系统服务
Target unit .Target 用于模拟实现"运行级别"
Device unit .device 定义内核识别的设备
Mount unit .mount 定义文件系统挂载点
Socket unit .socket 标识进程间通信用到的socket文件
Snapshot unit .snapshot 管理系统快照
Swap unit .swap 标识swap设备
Automount unit .automount 文件系统自动挂载点设备
Path unit .path 定义文件系统中的一文件或目录

CentOS 7管理系统服务service unit:

Control the systemd system and service manager
systemctl [OPTIONS...] COMMAND [NAME...]
动作 CentOS 6 CentOS 7
启动 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 is-active NAME.service
查看所有已激活的服务 systemctl list-units --t service
查看所有服务(包含未激活) chkconfig --list systemctl list-units -t NAME.service -a
设置服务开机自启 chkconfig NAME on systemctl enable NAME.service
禁止服务开机自启 chkconfig NAME off systemctl disable NAME.service
查看某服务是否能开机自启 chkconfig --list NAME systemctl is-enabled NAME.service
禁止某服务设定为开机自启 systemctl mask NAME.service
取消此禁止 systemctl umask NAME.service
查看服务依赖关系 systemctl list-dependencies NAME.service

管理target units:

运行级别 对应别名 服务名
0 runlevel0.target poweroff.target
1 runlevel1.target rescue.target
2 runlevel2.target multi-user.target
3 runlevel3.target multi-user.target
4 runlevel4.target multi-user.target
5 runlevel5.target graphical.target
6 runlevel6.target reboot.target

service unit文件组织格式:

文件通常由三段组成:

[Unit]:主要定义与Unit类型无关的通用选项;用于提供当前unit的描述信息、unit行为及依赖关系;
[Service]:与特定类型相关的专用选项;此处为service类型;
(UNIT-TYPE,类似是什么就为相对应的名称)
[Install]:定义由"systemctl enable"以及"systemctl disable"命令在实现服务启用或禁用时用到的一些选项;

各部分释义:

编译安装nginx\apache,并通过systemd来管理

第一步--安装nginx基础依赖包并创建用户

[root@wujunjie ~]# yum install pcre pcre-devel.x86_64 openssl-devel.x86_64 -y
[root@wujunjie ~]# useradd nginx
[root@wujunjie ~]# echo nginx|passwd --stdin nginx

第二步--下载nginx并编译安装

[root@wujunjie ~]#官网下载nginx包
[root@wujunjie tools]# tar -xf nginx-1.14.0.tar.gz
[root@wujunjie tools]# ls
nginx-1.14.0  nginx-1.14.0.tar.gz
[root@wujunjie tools]# cd nginx-1.14.0/
[root@wujunjie nginx-1.14.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.4/ --with-http_stub_status_module --with-http_ssl_module
[root@wujunjie nginx-1.14.0]# make && make install

第三步--编辑配置文件

[root@wujunjie ~]# cd /usr/lib/systemd/system
[root@wujunjie system]# vim nginx.service
[unit]
Description=nginx
After=network.target

[Service]
Type=forking 
ExecStart=/usr/local/nginx1.4/sbin/nginx 
ExecReload=/usr/local/nginx1.4/sbin/nginx -s reload
ExecStop=/usr/local/nginx1.4/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

第四步--最后重启;关闭nginx

[root@wujunjie ~]# systemctl daemon-reload   #重新载入
[root@wujunjie ~]# systemctl start nginx.service
启动后效果图
[root@wujunjie ~]# systemctl reload nginx.service
[root@wujunjie ~]# systemctl stop nginx.service
关闭后效果图

二、描述awk命令用法及示例(至少3例)

2、变量
2.1内建变量

2.2自定义变量
(1) -v VAR=VALUE变量名区分字符大小写;
(2) 在program中直接定义
注意:定义变量,同bash中一样,用时定义即可;

[root@wujunjie ~]# awk -v test='hello gawk' '{print test}' /etc/issue
hello gawk
hello gawk
hello gawk
文件此处没什么用,只有一个显示行数作用;即文件有12行显示了每行显示一次,显示了3行;

3、printf命令(格式化输出命令)

printf FORMAT, item1, item2, ...

FORMAT是格式符,为每个item按位占一个位留一个特殊符号,所以item最终会显示在format指定格式符号的位置上;

修饰符:
#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后的精度;默认右对齐;
%3.1f:3表示显示3个字符的宽度;
-: 左对齐
+:显示数值的符号
4、操作符
算术操作符:
x+y, x-y, x*y, x/y, x^y(x的y次方), x%y(取模)
-x:把整数转为负数;
+x: 把字符串转换为数值;
字符串操作符:
没有符号的操作符,字符串连接(一般使用内建函数进行字符串切片)
赋值操作符:
=, +=, -=, *=, /=, %=, ^=(增强相赋值)
++, --(自增、自减运算)
比较操作符:
>, >=, <, <=, !=, ==(等值比较)
模式匹配符:
~:左侧字符串是否能被右侧模式匹配;
!~:左侧字符串是否不能被右侧模式匹配;
逻辑操作符:将多个操作连接起来;
&& 与运算
|| 或运算
! 非运算
函数调用:(这才是规范使用方式)

function_name(argu1, argu2, ...)

条件表达式:

selector?if-true-expression:if-false-expression

5、PATTERN(实现地址定界功能)
(1) empty:空模式,匹配每一行;
(2) /regular expression/:仅处理能够被此处的(正则表达式)模式匹配到的行;前面加!表示对模式过滤的条件取反;
(3) relational expression: 关系(比较)表达式;结果有“真”有“假”;结果为“真”才会被处理;
真:结果为非0值,非空字符串;
假:0,空字符串;
(4) line ranges:行范围,
/pat1/,/pat2/:startline,endline表示地址定界;
注意: 不支持直接给出数字的格式
~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END模式
BEGIN{program}: 仅在开始处理文件中的文本之前执行一次程序;显示表头;
END{program}:仅在文本处理完成之后命令结束之前执行一次程序;
6、常用的action
(1) Expressions
(2) Control statements:if, while等;
(3) Compound statements:组合语句;
(4) input statements
(5) output statements
7、控制语句
if(condition) {statments}
if(condition) {statments} else {statements}
while(conditon) {statments}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
continue
delete array[index]
delete array
exit
{ statements }
7.1 if-else语句,支持双分支if语句,完成条件判断;
语法格式:if(condition) statement [else statement]
语句如果有多个,需要用{}括起来;如果有else语句,各语句都要用{};
使用场景:对awk取得的整行或某个字段做条件判断时使用;
7.2 while循环
语法格式:while(condition) statement
条件“真”,进入循环;条件“假”,退出循环;语句如果有多个,需要用{}括起来;
要根据初始条件判断为真或假,如果为假,则一次都不会执行;
使用场景:对一行内的多个字段逐一进行类似处理时使用;或对数组中的各元素逐一处理时使用;
7.3 do-while循环
语法:do statement while(condition)
7.4 for循环
语法格式:for(expr1;expr2;expr3) statement
expr1:控制变量初始化;
expr2:条件判断;
expr3:控制变量的数值修正表达式;
for(variable assignment;condition;iteration process) {for-body}
即:for(变量赋值;条件判断表达式;变量修正表达式) {循环体语句} 意义:无论条件真假,先执行一次,即至少执行一次循环体
7.5 switch语句(在awk中用的不多)
语法格式:
switch(expression) {case VALUE1 or /REGEXP1/: statement1; case VALUE2 or /REGEXP2/: statement2; ...; default: statement}
7.6 break和continue(不做详细介绍,用到时再说)
break [n]:退出n层循环;
continue:提前结束本轮循环,直接进入下一轮循环(即下一个字段);
7.7 next
在awk中能实现2重循环,awk本身可对文件每行循环,使用循环语句是为了遍历一行中的每个字段,或数组中的每个元素;
next同continue一样,也是控制循环的,但是是控制awk的本身循环的;即提前结束对本行的处理而直接进入下一行;
8、array数组
关联数组:array[index-expression]
index-expression:索引表达式
(1) 可使用任意字符串;字符串要使用双引号;不能随便使用单引号;
(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空”;允许未经声明直接引用;
若要判断数组中是否存在某元素,要使用"index in array"格式进行;

三、描述awk函数示例(至少3例)

字符串处理:
length([s]):返回指定字符串的长度;
sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容;

  例如:
  [root@wujunjie ~]# awk -F: '{sub(o,O,$1)}' /etc/passwd
  把每行的第1字段中,第一次出现的小写o替换为大写O;注意:仅替换每行一次出现的;

gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现的内容均替换为s所表示的内容;
split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;数组元素从1开始编号;

  例如:
  [root@wujunjie ~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
  192.168.32.1 1
  0.0.0.0 6
  显示来访的主机地址连接的次数;
上一篇 下一篇

猜你喜欢

热点阅读