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
posted @ 2021-08-01 16:31  GaoBeier  阅读(55)  评论(0编辑  收藏  举报