• linux系统管理员 第五部分 1认识系统服务


    linux系统管理员

    一 认识系统服务
    二认识与分析登录文件
    三启动流程、模组管理与loader
    四网络设定与备份策略
    五软件的安装  源代码与tarball
    六软件的安装rpm   srpm与yum
    七 xwindow 设置
    八核心编译
     
     
     
     
     
    一认识系统服务
    daemon    
    命令规则   无论如何   这些服务的名称后面都加上一个d   
    centos7之前通过init来管理    
    服务启动  关闭与观察方式:
    /etc/init.d/下   的脚本文件   
    语法:/etc/init.d/daemon start
    /etc/init.d/daemon stop
    /etc/init.d/daemon restart
    /etc/init.d/daemon status
    服务启动的分类:
    stand alone 独立启动   该服务直接常驻在内存中   提供本机或用户的服务行为  反应比较快
    super daemon 总管程序    由特殊的哦xinetd或inetd这两个纵观程序提供socket对应或port对应的管理。
    服务的相依性
    服务的执行等级的分类
    init 根据user自定的执行等级  runlevel 来唤醒不同的服务   进入不同的操作界面   共分为7个等级    0 单人 模式   3 文本模式    5图形界面      各个执行等级通过/etc/rc.d/rc[0-6]/sxxdaemon  链接到/etc/init.d/daemon    链接文 件名称功能为S为启动该服务    xx为数字   即启动的顺序   所以在开机时  可以依序执行所有需要的服务,同时也能解 决相依服务的问题。
    制定执行等级预设要启动的服务:
    开机启动和开机不启动
    chkconfig  daemon on
    chkconfig daemon off
    chkconfig  --list daemon   列表
     
    执行等级切换
    runlevel 3   切换到5    使用 init 5  命令
     
    systemd使用的unit分类     与systemv 的启动服务相比较
    平行处理所有服务   
    init 启动方式为一项一项的启动  按照顺序    但是systemd是让所有服务同时启动的
    有要求就回应的on-demand启动方式
    systemd全部就是仅有一只systemd服务搭配systemctl指令来处理    不需要其他的指令,systemd 常驻内存   服务依赖性的自检
    b服务启动前  需要先启动a服务   systemd 会自动启动a服务来帮助b服务的成功运行
    按照daemon功能分类
    unit  服务单位类型分为service  socket  target   path   snapshot   timer 等多种不同的类型  
    将多个daemons 集合成为一个群组
    如同systemv的init里有个runlevel   systemd将许多的功能集合成为一个target项目   此项目 用在设计操作环境上  所以集合了许多的daemons  所以是执行某个target就是执行多个daemon的意思
    向下兼容init
     
    systemd  的设置文件目录
    上面提到的服务类型包括   系统服务 service     ;    文件监听与交换 socket  ;  储存系统状态快照类型  snapshot;提供不同类型执行等级的环境target等
    /usr/lib/systemd/system:每个服务主要的启动脚本设置   最主要的    相当于/etc/init.d   
    /run/systemd/system:执行过程中所产生的服务脚本   优先级比上面的高
    /etc/systemd/system/根据主机要求   所建立的执行脚本    类似于/etc/rc.d/rc5.d/Sxx   优先级比上面的run中的文件高
    systemd的unit类型分类说明
    扩展名来区分服务类型
    .service     .target
    .service     一般类型的服务  主要的系统服务    包括服务器本身需要的本机服务和网络服务  为大多数
    .socket 内部程序数据交换  的插槽服务     主要是IPC   inter -process-communication     监控   当有此插槽问及那传递信息需要连接某个服务时,就按照当时的状态将该用户的要求传送到对应的daemon    如果daemon尚未启动  则启动daemon后再传送用户的要求。
    .target 执行环境     很多unit的集合   例如multi-user.target    执行此服务就是执行一堆其他的.service和.socket之类的服务
    .mount   .automount    为系统挂载服务   例如来自网络的自动挂载    NFS文件系统与文件系统相关性较高的程序管理
    .path 目录服务   检测   例如打印
    .timer 循环执行的服务   类似anacrontab    
     
    通过systemctl来管理服务
     
    语法:systemctl   [command]  [unit]
    start    stop    restart     reload      enable开机启动     disable开机不启动     status   is-active检测是否正在运行    is-enable 检测开机是否启动

    状态注意:  

    active(running)   有一个或多个程序正在系统中执行的意思   
    active(exited) 仅执行一次就正常结束的服务   当前并没有在系统中执行  并非一直执行  大部分自己写的bash 脚本     
    active(waiting) 正在执行当中   不过需要等待其他的事件才能继续处理  
    inactive 当前未运行
     
    daemon的预设状态有
    enabled 开机启动
    disabled    开机不启动
    static      不能自己启动   需要被其他的enabled的服务来唤醒   想依赖性
    mask 注销   非删除  不能启动   用unmask方式改回
    练习:1.依赖性   
    cups 服务的依赖性
    cups.service cups.socket cups.path
    通常.socket 负责监听(启动) cups.service和.path(未启动) 此时当有服务请求的时候 socket再唤醒service 和path 所以需要关闭cups服务的时候 需要同时关闭三个服务 不能仅仅关闭service 。
    2.mask 强迫注销
    上面的例子中可以同时关闭三个服务
    但是也可以用mask强制注销的方法 针对.service 来是cups服务不能提供服务
    3.通过systemctl观察系统上所有的服务
    语法:systemctl [command] [--type=TYPE] [--all]
    list-units list-unit-files 更加详细
    systemctl list-units --type=service --all 显示unit的某一个类别 service的类别daemon 不管是否启动
    4.通过systemctl管理不同的操作环境 target unit
     
    graphical.target 文字加图形
    multi-user.target 文字
    rescue.target root无法登入 时 救援模式
    emergency.target root能够登录 的紧急处理系统错误模式
    shutdown.target 关机流程设置
    getty.target 设置你需要几个tty之类的
     
    命令语法systemctl [command]  [unit.target]
    get-default 获取当前target
    set-default 设置后面的target为预设的操作环境
    isolate 切换到后面接的模式
    例如:systemctl set-default  mluti-user.target     设定下次开机为文本模式
    systemctl isolate graphical.target 切换到图形界面

    systemctl   +    poweroff
    reboot
    suspend    暂停模式将文件保存在内存中  然后关闭大部分硬件
    hibernate 休眠模式将状态保存到硬盘中  完毕后  将电脑关机
    rescue
    emergency
     
    5.通过systemctl分析各个服务之间的依赖关系
    语法:systemctl     list-dependencies     [unit]    [--reverse]
    reverse   反向追踪谁使用此unit的意思
    树的形式列出想依赖关系   正向为根节点用到下面的各个服务  向下
    reverse反向:为根节点被下面的叶子节点用到
    6.与systemd的daemon运行过程相关的目录简介
    除了/usr/lib/systemd/system/和/etc/systemd/system/目录下   还有与daemon相关的文件
    /usr/lib/systemd/system/   发行版 预设的启动脚本原始位置   尽量不修改   如果需要修改用/etc/systemd/system
    /run/systemd/system/       系统执行过程中产生的服务脚本   优先级比上面的高
    /etc/systemd/system/       根据主机要求自定义的执行脚本 
    /etc/sysconfig/* 几乎所有的系统服务都会初始化的选项放在此目录下  例如网络的设定目录为network- scripts
    /var/lib/ 产生数据的服务都会讲数据写入/var/lib的目录中   例如数据库管理系统mariadb的数据 默认写入/var/lib/mysql中
    /run/ 放置很多的daemon的缓存文件    包括lock file以及PID file等等
    7. 网络服务与端口对应
    /etc/services    此文件列出了每个协议服务的端口
    观察网络服务的端口      netstat -tlunp    
    例如ssh的服务应该加上防火墙   有些则可以不用    有些不了解的监听网络服务  可以关闭
    systemctl针对service类型的设定文件
    1.目录简介
    /usr/lib/systemd/system/vsftpd.service   发行版 给出的原始默认设置文件   建议不动
    /etc/systemd/system/vsftpd.service.d/custom.conf
     在/etc/systemd/system底下建立与配置文件相同名的目录  然后加上.d的扩展名   然后在该目录下建立配置文件即 可,配置文件最好文件名取名为.comf    此目录下的文件设置会追加到/usr/lib/systemd/system/vsftpd.service 里
     /etc/systemd/system/vsftpd.service.wants/*  此目录内的文件为链接文件   设置相依赖服务的链接,意思是启动了 vsftpd.service之后,最好再加上这个目录下的建议的服务
     /etc/systemd/system/vsftpd.service.requires/  链接文件,设置相依性服务的链接      意思是启动vsftpd.service之前   需要先启动哪些服务     
    2.systemctl配置文件的项目简介
    大约有一下几个项目
    unit unit本身的说明  以及与其他想依赖的daemon的设定
    service  socket timer mount path不同的unit type就得要使用相对应的设定   
    install 此unit安装到哪个target里面
    重复设置的项目  后面会覆盖前面
    布尔值判定  可以使用1    yes   true    on来代表启动
    0 no false off代表关闭
    空白航   开头为#或者;的哪一行  代表注解
    execstart   实际执行此daemon的指令或脚本   也可以使用execstartpre之前以及execstartpost之后两个设定项目来实际启动服务前,进行额外的指令行为
     
    实例
    3.举例两个vsftpd服务    两个端口一个555另一个21
    先建立需要的配置文件
    cd /etc/vsftpd
    cp vsftpd.conf vsftpd2.conf
    讲第一个监听的端口改为555
    diff vsftpd.conf vsftpd2.conf  检测不同内容
    开始处理启动脚本
    cd /etc/systemd/system
    cp /usr/lib/systemd/system/vsftpd.service     vsftpd2.service
    vim vsftpd2.service
    更改描述的信息  
    description=.....
    execstart=/usr/sbin/vsftpd   /etc/vsftpd/vsftpd2.conf
    重新载入systemd的脚本配置文件
    systemctl daemon-reload
    systemctl list-unit-files  --all | grep vsftpd
    systemctl restart vsftpd.service  vsftpd2.service
    systemctl enable vsftpd.service  vsftpd2.service
    systemctl status vsftpd.service  vsftpd2.service
    netstat -tlnp
    4.多重的重复设置方式   getty  为例
    agetty 程序管控 getty
    主要管理文件为getty.target   这个unit    实际产生的tty1~tty6的则是由getty@.service 所提供的
    先查看/usr/lib/systemd/system/getty@.service
    其中重要的信息为
    execstart=-/sbin/agetty  --noclear  %I    $TERM
    其中的@原因需要看   getty@.service上面的文件   getty.target  
    systemctl show  getty.target
    文中会有显示:after=getty@tty1.service  getty@tty2.service ......
    在启动完getty.target服务之后会要求持续启动getty1.target    getty2.target   getty3.target...
    所以可以判断   systemd的运行方式
    a 先看/usr/lib/systemd/system/     /etc/systemd/system/   下面有没有getty@tty1.service的设置 ,如有就 执行,如过没有就执行下一步
    b 找getty@.service  的设置   如过有就将@后面的资料带入成%I的变量    进入getty@.service 执行。
    原始文件:执行服务名@.service
    执行文件:执行服务名@范例名称.service
    5.更改tty数量
    vim /etc/systemd/logind.conf
    NAutoVTs=4
    ReserveVT=0
    之后重启    systemctl stop  getty@tty5.service    getty@tty6.service
    systemctl restart systemd-logind.service
     
            6.重新打开一个全新的终端
    systemctl start getty@tty8.service
    7.新增vsftpd到新的端口2121
    cat /usr/lib/systemd/system/vsftpd@.service
    其中  execstart=/usr/sbin/vsftpd     /etc/vsftpd/%i.conf       %i或者%I  代表@后面接的范例文件的名称
    a 建立vsftpd3.conf文件    通过此文件来启动新服务
    cd /etc/vsftpd
    cp vsftpd.conf vsftpd3.conf
    vim vsftpd3.conf
    listen_port=2121
    b 暂时启动这个服务  不要永久启动
    systemctl start   vsftpd@vsftpd3.service
    systemctl status vsftpd@vsftpd3.service
    netstat -tlunp
    所以vsftpd@vsftpd3.service    代表要使用的配置文件在/etc/vsftpd/vsftpd3.conf  的意思
    *****注意在增加的端口小于1024的时候  需要root的权限     如过端口大于1024则   不需要root的权限  但是 同样危险
    8.自己的服务自己作 模拟一个可以备份自己系统的服务
    a 服务文件放在/backups 文件夹下
    vim /backups/backup.sh
     
    #!/bin/bash
    source="/etc    /home    /root   /var/lib    /var/spool/{cron,at,mail} "
    target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
    [! -d /backups ] && mkdir /backups
    tar -zcvf ${target} ${source} &> /backups/backup.log
     
    chmod a+x /backups/backup.sh
    ll /backups/backup.sh
     接下来   需要设计一只名称为backup.service的启动脚本
     
    vim /etc/systemd/system/backup.service
     
    [unit]
    description=backup my server
    requires=atd.service
     
    [service]
    type=simple
    execstart=/bin/bash -c "echo /backups/backup.sh | at now"
     
    [install]
    wantedby=multi-user.target    因为需要at这个命令   所以  atd.service  是必须启动的服务
     
    测试命令
    systemctl daemon-reload
    systemctl start backup.service
    systemctl status backup.service
     
    再出现的结果显示中   出现的inactive   原因是执行完成就完毕了    不会继续存在内存当中
     
    systemctl针对timer的配置
    原来的at和crond这个服务
    systemd.timer 的优点
    所有systemd服务产生的信息都会被记录 log 所以比crond在debug上面更清楚
    各个timer的工作可以跟systemd的服务相结合
    各个timer的工作可以跟control group (cgroup 用来取代/etc/secure/limit.conf 结合)来限制该工作的资源利用
    缺点timer没有email的功能 但是可以自己写脚本   时间单位可以精确到ms
       任务需求
    必要条件
    系统的timer.target   一定要启动
    需要sname.service的服务存在   sname是自定义的名称
    需要sname.timer的时间启动服务存在
    sname.timer的设定值
    你可以到/etc/systemd/system底下去建立这个*.timer文件   
    onactivesec timer.target启动多久之后才执行此unit
    onbootsec 开机完成多久之后才执行
    onstartupsec systemd第一次启动之后多久才执行
    onunitactivesec 此timer设定文件所管理的那个unit服务在最后一次启动后,隔多久后再执行一次的意思
    onunitinactivesec 此timer设定文件所管理的那个unit服务在最后一次停止后,隔多久后再执行一次的意思
    oncalendar 用实际时间启动服务
    unit 名称
    persistent 使用oncalendar设定时,指定该功能不需要持续进行
     
    如何使用oncalendar的时间
    如果想要从crontab转成这个timer功能    需要了解timer的时间格式
    语法:英文周名     YYYY-MM-DD   HH:MM:SS
    范例:THU 2015-08-13 13:40:00
    英语口语:now     today     tomorrow     hourly     daily      weekly   monthly      +3h10m         2015-08-16
    实例:
    需求:开机后2小时开始执行一次这个backup.service
       自从第一次执行后,未来我每两天要执行一次  backup.service
    vim /etc/systemd/system/backup.timer
     
    [unit]
    description=backup my server timer
     
    [timer]
    onbootsec=2hrs
    onunitactivesec=2days
     
    [install]
    wantedby=multi-user.target
     
    systemctl daemon-reload
    systemctl enable backup.timer
    systemctl restart backup.timer
    systemctl list-unit-files | grep backup
     
    systemctl show timers.target
    systemctl show backup.service
    systemctl show backup.timer
    一个固定日期运行的案例
    需求  星期天凌晨2点运行这个备份程序一遍    名称为backup2.timer
    vim /etc/systemd/system/backup2.timer
    [unit]
    description=backup my server timer2
    [timer]
    oncalendar=sun *-*-* 02:00:00
    persistent=true
    unit=backup.service
    [install ]
    wantedby=multi-user.target
     
    systemctl daemon-reload
    systemctl enable backup2.timer
    systemctl start backup2.timer
    systemctl show bakcup2.timer
     
    出现的执行时间nextelapseusecrealtime是与unix标准时间的比较值   1970-01-01  00:00:00
     
    centos 7.x预设启动的服务简易说明
    常见的服务  daemon
    abrtd    登录出错时的机制  根据此服务进行错误克服
     
    accounts-daemon 可关闭 使用accountsservice计划 账号管理,  可关闭
    alsa-x可关闭      音效  不开图形界面  可关闭
    atd 单一的例行性工作排程 at服务
         auditd selinux相关
    avahi-daemon 可关闭 用户端服务通过zeroconf自动的分析与管理网络   常用在笔记本电脑上
    brandbot rhel-* 大多数用于开机过程中需要的各种侦测环境的脚本   同时也提供界面的启动与关闭
    chronyd
    ntpd
    ntpdate 网络校正时间的服务
    cpupower cpu运行情况
    crond 定时服务  与at类似   周期性
    cups 可关闭 打印机服务
    dbus d-bus的方式在不同的应用程序之间传送信息 应用程序之间的信息传递,每个使用者登录时提供的信息 资料等
    dm-event multipathd 系统监控对应表  device mapper的主要服务   不能关
    dmraid-activation     mdmonitor 用来启动软raid的重要服务   尽量不关闭
    dracut-shutdown 处理initramfs的相关行为    与开机流程相关性较高
    ebtables 系统或网络服务类似iptables的防火墙规则  设定如果没有使用虚拟化或者使用了firewalld 此服务可禁用
    emergency 
    rescue 进入紧急模式或者是救援模式的服务
    firewalld 系统或网络   此为防火墙    替代以前的iptables等的防火墙机制   搭配firewall-cmd指令   可以快 速的建制好防火墙系统

    gdm gnome的登入管理员   就是图形界面上一个很重要的登录管理服务
    getty@ 本机系统产生文字界面  tty登入的服务
    hyper*
    ksm*
    libvirt*
    vmtoolsd   跟虚拟机相关的服务     如果不用虚拟机  可以关闭
    irqbalance 如果硬件为多核心的硬件    则需要启动    可以自动分配系统终端IRQ 之类的硬件资源
    iscsi 网络磁盘服务    如果没有挂载   则可以关闭
    kdump 可关闭    主要用在  linux核心出错的时候  ,用来记录内存数据的服务    可以关闭
    lvm2-* 跟lvm相关性较高的许多服务     不可关闭
    microcode intel的cpu指令集   如果没有下载intel的相关指令文件  则可以不启动
    modemmanager
    network
    networkmanager*    数据,网络设定等服务   建议使用networkmanager搭配nmcli指令来处理网络设置
    quotaon  启动quota要用到的服务
    rc-local /etc/rc.d/rc.local   需要具有x的执行权限 
      rsyslog 记录系统产生的日志信息  包括/var/log/messages内的几个重要的登录文件
    smartd 自动检测硬盘状态   报告管理员
    sysstat sar的指令记录 某时间点  系统的资源使用情况  包括cpu  io输入出等   当此服务启动后   这些记录的数 据会写入log中   
    sysstemd-* 系统运行过程中需要的服务
    plymount*
    upower      与图形界面相关的服务   可关闭
     
    上面的服务为centos7中默认启动的
     
    注意管理员应该使用man systemd.unit    man systemd.service    man systemd.timer查询/etc/systemd/system/目录下设定文件的语法     然后使用systemctl daemon-reload载入后  再自行编写服务于管理服务
  • 相关阅读:
    9.过滤器的使用
    8.公共组件
    7.Props向子组件传递数据
    6.组件
    5.指令系统-事件
    4.指令系统
    SpringCloud入门
    springcloud注解
    was unable to refresh its cache! status = Cannot execute request on any known server
    集成第三方框架,报错NoSuchFieldError:logger
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7902608.html
Copyright © 2020-2023  润新知