zoukankan      html  css  js  c++  java
  • 13.Linux系统服务

    13.Linux系统服务

    1.系统启动流程

    1.1 CentOS6

    1.2 CentOS7

    2.启动运行级别

    2.1 什么是运行级别

    运行级别:指操作系统当前正在运行的功能级别

    Systemd V init运行级别 systemd目标名称 作用
    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 重启

    2.2 调整运行级别

    • systemd 使用 targets 而不是 runlevels 有两个
      主要目标:
      • multi-user.target :类似于运行级别3
      • graphical.target : 类似于运行级别5

    1.查看系统默认运行级别

    [root@student ~]# systemctl get-default
    

    2.要设置默认目标,请运行

    [root@student ~]# systemctl set-default
    TARGET.target
    

    3.Systemd管理

    3.1 systemd的由来

    • Linux 一直以来都是采用 init 进程作为祖宗进程,但
      是 init 有两个缺点:
      • 1.系统启动时间长, init 进程是串行启动,只有
        前一个进程启动完,才会启动下一个进程;
      • 2.启动脚本复杂,初始化系统后会加载很多脚本,
        脚本都会处理各自的情况,并且脚本多而杂;
      • 写脚本;
    • systemd 即为 system daemon 守护进程, systemd
      主要解决上文的问题而诞生
    • systemd 的目标是,为系统的启动和管理提供一套完
      整的解决方案;

    • Centos5 启动速度慢,串行启动过程,无论进程相互
      之间有无依赖关系。
    • Centos6 启动速度有所改进,有依赖的进程之间依次
      启动而其他与之没有依赖关系的则并行同步启动。
    • Centos7 所有进程无论有无依赖关系则都是并行启动
      (当然很多时候进程没有真正启动而是只有一个信号
      或者说是标记而已,在真正利用的时候才会真正启
      动。)

    3.2 systemd的优势

    • 1、最新系统都采用 systemd 管理 RedHat7、
      CentOS7、Ubuntu15 ;
    • 2、 Centos7 支持开机并行启动服务,显著提高开机
      启动效率;
    • 3、 Centos7 关机只关闭正在运行的服务,而
      Centos6 全部都关闭一次;
    • 4、 Centos7 服务的启动与停止不在使用脚本进行管
      理,也就是 /etc/init.d 下不在有脚本;
    • 5、 Centos7 使用 systemd 解决原有模式缺陷,比如
      原有 service 不会关闭程序产生的子进程;

    3.3 systemd相关命令

    • /usr/lib/systemd/system/ :服务启停文件,通过
      systemctl 命令对其文件启动、停止、重载等操作
      • systemctl start crond :启动服务
      • systemctl stop crond :停止服务
      • systemctl restart crond :重启服务
      • systemctl reload crond :重载服务
      • systemctl enable crond :服务设定为开机运行
      • systemctl disabled crond :服务设定为开机不运行
      • systemctl daemon-reload crond :创建服务启动文件需要重载配置
      • systemctl list-unit-files :查看各个级别下服务的启动与禁用
      • systemctl is-enabled crond.service :查看特定服务是否为开机自动
      • systemctl is-active crond :查看服务是否在运行

    3.4 systemd管理Nginx

    1.编译 nginx

    wget http://nginx.org/download/nginx-
    1.21.1.tar.gz
    tar xf nginx-1.21.1.tar.gz
    cd nginx-1.21.1
    ./configure --prefix=/usr/local/nginx-
    1.21.1 
      --with-http_ssl_module 
      --with-http_stub_status_module
    make && make install
    ln -s /usr/local/nginx-1.21.1
    /usr/local/nginx
    

    2.常规启动 nginx 方式

    /usr/local/nginx/sbin/nginx       # 启动
    /usr/local/nginx/sbin/nginx -s reload  # 重启
    /usr/local/nginx/sbin/nginx -s stop   # 关闭
    

    3.systemd 管理 nginx

    # Before、After:定义启动顺序。
      # Before=xxx.service 代表本服务在
    xxx.service启动之前启动
      # After=xxx.service 代表本服务在
    xxx.service之后启动
      # Wants=xxx.service 代表该服务启动了,它依
    赖的服务也会被启动;依赖的服务如果被停止,不影响本服务
    # vim /usr/lib/systemd/system/nginx.service
    [Unit]
    Description=nginx
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    [Service]
    Type=forking
    #Environment="PATH=$PATH:/usr/local/nginx/sbin"
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    

    4.救援模式

    4.1 场景1-忘记超级管理员密码

    • 如何使用单用户模式进行变更系统密码?以Centos7
      系统为例:
    • 第1步:重启 Linux 系统主机并出现引导界面时,
      按下键盘上的 e 键进入内核编辑界面
    • 第2步:在 linux16 这行的后面添加 enforcing=0
      init=/bin/bash ,然后按 Ctrl + x 进入
    • 第3步:进入到系统的单用户模式,依次输入以下
      命令,重启操作系统,使用新密码登录
      • 1、 mount -o rw,remount / 默认/分区只读,
        重新挂载为读写模式
      • 2、 echo "123" | passwd --stdin root :非
        交互式修改密码
      • 3、 exec /sbin/init :重新引导系统

    4.2 场景2-系统损坏需要备份数据

    • 当系统坏了,无法登陆系统,但需要把里面的数据复
      制出来,怎么办?
      • 第一步:挂载 ISO 镜像文件,修改 BIOS ,调整
        DVD 光盘为第一引导;
      • 第二步:选择 Troubleshooting ,继续选择
        Rescue a CentOS system 救援模式;
      • 第三步:输入 1 ,然后执行命令 chroot
        /mnt/sysimage ,挂载真实系统;
      • 第四步:备份系统中的数据文件至其他磁盘;

    4.3 场景3-误删除grub文件修复

    • Centos 误删除 grub 文件如何进行修复
      • 第一步:模拟误删除故障 rm -rf /boot/grub2
        && reboot
      • 第二步:系统无法正常启动起来(提示grub找不
        到)
      • 第三步:然后按照之前的操作进入救援模式,执行
        chroot /mnt/sysimage 挂载真实的操作系统;
      • 第四步:使用 grub2 相关命令修复
        • grub2-install /dev/sda 重新添加mbr引导
        • grub2-mkconfig -o /boot/grub2/grub.cfg
          重新生成配置
        • ls /boot/grub2/grub.cfg

    5. 系统优化

    • cpu:
      • 1.虚拟化支持;
      • 2.cpu超线程;
    • 硬盘:
      • 1.SAS;
      • 2.SSD;

    5.1 调整yum源

    • 默认安装系统对外提供的yum仓库为国外站点,可以
      将站点修改为国内,加速软件包下载
    # base
    [root@node ~]# wget -O
    /etc/yum.repos.d/CentOS-Base.repo
    https://mirrors.aliyun.com/repo/Centos-
    7.repo
    # epel
    [root@node ~]# wget -O
    /etc/yum.repos.d/epel.repo
    http://mirrors.aliyun.com/repo/epel-7.repo
    # mysql 、 zabbix、elk软件包
    

    5.2 关闭防火墙

    • 默认情况下还会采用关闭防火墙,以避免影响后期服
      务的使用;
      • 云主机:有硬件提供的安全组产品来提供防护;
      • 物理机:一般公司在入口层面都会有硬件防火墙;
    # firewalld
    [root@node ~]# systemctl stop firewalld
    [root@node ~]# systemctl disabled firewalld
    # selinux
    [root@node ~]# setenforce 0
    [root@node ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
    

    5.3 ulimit资源限制

    • ulimit 命令可以对系统资源进行控制
      • -u :限制普通用户所能打开的最大进程数目;(每
        个用户 )
      • -n :限制用户能分配到的文件描述符数量 ;

    5.3.1 限制进程最大数量

    1.限制每个用户最大能打开3个进程;

    [root@oldxu ~]# ulimit -u 3
    

    2.登陆用户启动多个进程测试

    [root@node ~]# su - gao
    [gao@node ~]$ sleep 1000 &
    [1] 10857
    [gao@node ~]$ sleep 1000 &
    [2] 10858
    [gao@node ~]$ sleep 1000 &
    -bash: fork: retry: 资源暂时不可用
    -bash: fork: retry: 资源暂时不可用
    -bash: fork: retry: 资源暂时不可用
    

    5.3.2 限制打开文件数量

    1.限制进程最多打开文件描述符为10

    [root@node ~]# ulimit -n 10
    

    2.编写 python 程序模拟打开多个文件

    [root@node ~]# cat open_file.py
    #!/usr/bin/env python
    import time,os
    from threading import Thread
    print(os.getpid())
    def new_file(n):
     with open('%s.file' %n,mode='wt') as
    f1:
       time.sleep(2000)
       if __name__ == "__main__":
      count=1
      while True:
       Thread(target=new_file,args=
    (count,)).start()
       count+=1
       time.sleep(2)
    

    3.等待一段时间,当程序打开文件超过限制,则会提示异常;

    Exception in thread Thread-9:
    Traceback (most recent call last):
    File "/usr/lib64/python2.7/threading.py",
    line 812, in __bootstrap_inner
    File "/usr/lib64/python2.7/threading.py",
    line 765, in run
    File "open_file.py", line 9, in new_file
    IOError: [Errno 24] Too many open files:
    '9.file'
    

    5.3.3 调整ulimit限制参数

    • 通过 ulimit 方式调整打开的文件数量,以及进程数
      量,都是临时操作,所以需要进行永久配置
      • 配置文件: /etc/security/limits.conf
      • 调整模式:
        • soft :软限制,超过则提示;
        • hard :硬限制,超过则停止;
    [root@node ~]# tail
    /etc/security/limits.conf
    # max user processes
    * soft nproc 60000
    * hard nproc 60000
    # open files
    * soft nofile 100000 ( 2^16-1 )
    * hard nofile 100000 ( 2^16-1 = 65535 )
    # 系统级,添加如下字段(调整内核才可以生效)
    [root@node ~]# tail /etc/sysctl.conf
    fs.file-max = 100000
    

    本文来自博客园,作者:GaoBeier,转载请注明原文链接:https://www.cnblogs.com/gao0722/p/15086981.html

  • 相关阅读:
    Codeforces Round #249 (Div. 2) D. Special Grid 枚举
    图论二
    C语言中的atan和atan2(转)
    BestCoder Round #79 (div.2)
    数学
    LCA
    二分图
    动态规划
    线段树
    树状数组
  • 原文地址:https://www.cnblogs.com/gao0722/p/15086981.html
Copyright © 2011-2022 走看看