美文网首页
Centos7的systemd新特性

Centos7的systemd新特性

作者: N33_LvQing | 来源:发表于2018-11-21 15:21 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Centos7的systemd新特性

          本文链接:https://www.haomeiwen.com/subject/hqaqqqtx.html