13.Linux系统服务
目录
13.Linux系统服务
1.系统启动流程
1.1 CentOS6
- 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.启动脚本复杂,初始化系统后会加载很多脚本,
脚本都会处理各自的情况,并且脚本多而杂; - 写脚本;
- 1.系统启动时间长, init 进程是串行启动,只有
- 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 :重新引导系统
- 1、 mount -o rw,remount / 默认/分区只读,
4.2 场景2-系统损坏需要备份数据
- 当系统坏了,无法登陆系统,但需要把里面的数据复
制出来,怎么办?- 第一步:挂载 ISO 镜像文件,修改 BIOS ,调整
DVD 光盘为第一引导; - 第二步:选择 Troubleshooting ,继续选择
Rescue a CentOS system 救援模式; - 第三步:输入 1 ,然后执行命令 chroot
/mnt/sysimage ,挂载真实系统; - 第四步:备份系统中的数据文件至其他磁盘;
- 第一步:挂载 ISO 镜像文件,修改 BIOS ,调整
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
- 第一步:模拟误删除故障 rm -rf /boot/grub2
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 :限制用户能分配到的文件描述符数量 ;
- -u :限制普通用户所能打开的最大进程数目;(每
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