Centos7的systemd新特性

1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
2、描述awk命令用法及示例(至少3例)
3、描述awk函数示例(至少3例)

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

systemd简介

systemd是一种管理系统初始化及正常运行时服务进程的管理工具,在centos5,6上使用工具时init在centos7上创新性的使用了systemd,相比较老版本的init而言多了许多新的特性,同时systemd也向后兼容sysv init所以在centos7上也可以使用service来管理服务进程。

systemd 新特性

  • 系统初始化时并行启动服务
  • 服务只在需要的时候才被激活
  • 系统状态快照
  • 基于依赖关系定义服务控制逻辑

unit简介

systemd将不同的资源称为unit,unit表示不同类型的systemd对象。

unit的配置文件

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system

unit的类型

unit的类型可以通过 systemctl -t help 命令来查看

 ~]# systemctl -t help
Available unit types:
service        #.service,用于定义系统服务;
socket         #.socket,用于标识进程间通信用到的socket文件;
target            #.target,用于模拟实现“运行级别”;
snapshot       # .snapshot, 管理系统快照;
device           #  .device,用于定义内核识别的设备;
mount           # .mount,定义文件系统挂载点;
automount        # .automount,文件系统自动点设备;
swap             #.swap, 用于标识swap设备;
path              # .path, 用于定义文件系统中的一文件或目录

systemd的关键特性:

  • 基于socket的激活机制:socket与程序分离;
  • 基于bus的激活机制;
  • 基于device的激活机制;
  • 基于Path的激活机制;
  • 系统快照:保存各unit的当前状态信息于持久存储设备中;
  • 向后兼容sysv init脚本:/etc/init.d/

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

编译安装nginx受systemd管理

前提:开发环境,包括nginx编译要启用的功能依赖到的开发库;

 yum groupinstall "Development Tools" "Server Platform Development"
 yum -y pcre-devel openssl-devel
#然后解压缩网上下载的源码包
tar -xf nginx-1.14.1.tar.gz -C /tmp
cd /tmp/nginx-1.14.1

./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
 --http-log-path=/var/log/nginx/access.log
 --user=nginx --group=nginx --with-http_ssl_module
  --with-http_stub_status_module
 --with-http_flv_module --with-http_mp4_module
 --with-threads --with-file-aio

 make -j 4 && make install

到此nginx的编译安装就算完成了,接下来我们创建nginx.service文件

service unit file:

文件通常由三部分组成:

  • [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;
  • [Service]:与特定类型相关的专用选项;此处为Service类型;
  • [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项;

Unit段的常用选项:

  • Description:描述信息; 意义性描述;
  • After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反;
  • Requies:依赖到的其它units;强依赖,被依赖的units无法激活时,当前unit即无法激活;
  • Wants:依赖到的其它units;弱依赖;
  • Conflicts:定义units间的冲突关系;

Service段的常用选项:

  • Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型;
    • simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
    • forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
    • oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
    • dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
    • notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess 来让Systemd 接收消息
    • idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
  • EnvironmentFile:环境配置文件;
  • ExecStart:指明启动unit要运行命令或脚本;
  • ExecStartPre, ExecStartPost
  • ExecStop:指明停止unit要运行的命令或脚本;
  • Restart:

Install段的常用选项:

  • Alias:
  • RequiredBy:被哪些units所依赖;
  • WantedBy:被哪些units所依赖;

注意:对于新创建的unit文件或,修改了的unit文件,要通知systemd重载此配置文件;

systemctl daemon-reload

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=The Nginx Server
After=network.target remote-fs.target nss-lookup.target

[Service]
PIDFile=/run/nginx.pid
EnvironmentFile=/etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -WINCH ${MAINPID} 
PrivateTmp=true

[Install]
WantedBy=multi-user.target

配置完成后记得执行systemctl daemon-reload
可以看到nginx服务能被systemd管理了

image.png

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

基本用法:
gawk [options] 'program' FILE ...
program: PATTERN{ACTION STATEMENTS}
语句之间用分号分隔
option:
-F:指明输入时用到的字段分隔符;
-v var=value: 自定义变量;

1、print

print item1, item2, ...
要点:
(1) 逗号分隔符;
(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式;
(3) 如省略item,相当于print $0;

2、变量

  • 2.1 内建变量
    FS:input field seperator,默认为空白字符;
    OFS:output field seperator,默认为空白字符;
    RS:input record seperator,输入时的换行符;
    ORS:output record seperator,输出时的换行符;
    NF:number of field,字段数量
    NR:number of record, 行数;
    FNR:各文件分别计数;行数;
    FILENAME:当前文件名;
    ARGC:命令行参数的个数;
    ARGV:数组,保存的是命令行所给定的各参数;

  • 2.2 自定义变量
    (1) -v var=value:变量名区分字符大小写;
    (2) 在program中直接定义

3、printf命令

  • 3.1格式化输出:printf FORMAT, item1, item2, ...
    (1) FORMAT必须给出;
    (2) 不会自动换行,需要显式给出换行控制符,\n
    (3) FORMAT中需要分别为后面的每个item指定一个格式化符号;

  • 3.2格式符:
    %c: 显示字符的ASCII码;
    %d, %i: 显示十进制整数;
    %e, %E: 科学计数法数值显示;
    %f:显示为浮点数;
    %g, %G:以科学计数法或浮点形式显示数值;
    %s:显示字符串;
    %u:无符号整数;
    %%: 显示%自身;

  • 3.3修饰符:
    #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后的精度;
    %3.1f
    -: 左对齐
    +:显示数值的符号

4、操作符

  • 4.1算术操作符:
    x+y, x-y, x*y, x/y, x^y, x%y
    -x
    +x: 转换为数值;

  • 4.2字符串操作符:没有符号的操作符,字符串连接

  • 4.3赋值操作符:
    =, +=, -=, *=, /=, %=, ^=
    ++, --

  • 4.4比较操作符:
    >, >=, <, <=, !=, ==

  • 4.5模式匹配符:
    ~:是否匹配
    !~:是否不匹配

  • 4.6逻辑操作符:
    &&
    ||
    !

  • 4.7函数调用:
    function_name(argu1, argu2, ...)

  • 4.8条件表达式:
    selector?if-true-expression:if-false-expression

5、PATTERN

(1) empty:空模式,匹配每一行;
(2) /regular expression/:仅处理能够被此处的模式匹配到的行;
(3) relational expression: 关系表达式;结有“真”有“假”;结果为“真”才会被处理;
真:结果为非0值,非空字符串;
(4) line ranges:行范围,
startline,endline:/pat1/,/pat2/
(5) BEGIN/END模式
BEGIN{}: 仅在开始处理文件中的文本之前执行一次;
END{}:仅在文本处理完成之后执行一次;

例子:

cat awktest.txt 
12 231 3432
23 43 3141
31 3321 43 
#找出文件第一列的最大值
1、awk 'BEGIN {max=$1}{max=max>$1?max:$1}END{print max}' awktest.txt 
31
#找出文件中数字的最大值
2、awk '{for(n=1;n<=NF;n++){a[$n]=$n;if(a[$n]>=max)max=a[$n]}} END {print max}' awktest.txt 
3432
#查找/etc/passwd 第二行到第十行,的第一个字段
3、awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd 
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
#统计当前链接状态的数量
4、netstat -tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state) { print i,state[i]}}'
LISTEN 5
ESTABLISHED 3
#/etc/passwd 输出开头为root与bin之间的行
5、awk -F: '/^root\>/,/^adm\>/{print}' /etc/passwd   
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#统计当前HTTP服务的ip链接数量
6、awk '{ip[$1]++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log

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

内置函数

  • 数值处理:

    • rand():返回0和1之间一个随机数;
  • 字符串处理:

    • length([s]):返回指定字符串的长度;
    • sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容;
    • gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现均替换为s所表示的内容;
    • split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;

例子

#统计当前链接IP的数量
 1、netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
192.168.31.242 3
0.0.0.0 3

#输出每一列最后一个字段的长度
2、awk '{print length($NF)}'  awktest.txt      
4
4
2
#生成了文件行数个随机数
3、awk '{print rand()}'  awktest.txt            
0.237788
0.291066
0.845814
#并不是真正的随机数
#生成10个随机数
 4、awk 'BEGIN {for (i=0;i<10;i++){print rand()}}'
0.237788
0.291066
0.845814
0.152208
0.585537
0.193475
0.810623
0.173531
0.484983
0.151863
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容