目录
bootloader: 引导加载器,引导硬件去找到 内核(操作系统的核心)
一、Linux操作系统引导过程
1引导过程
1.1 开机自检
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移 交系统控制权,大多时候会移交给本机硬盘。 网络启动 加载 网络批量pxe
硬件启动POST:加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测
主板的ROM:BIOS保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等
1.2 MBR引导
运行放在MBR扇区里的启动 GRUB引导程序
1.3GRUB菜单
系统类型双西雅图 内核文件 默认值
GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
grub功能和组成
bootloader: 引导加载器,引导硬件去找到 内核(操作系统的核心)
1.Windows: ntloader,仅是启动OS
2.Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选 定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
Linux的bootloader
1.LILO:LInux LOader,早期的bootloader,功能单一
2.GRUB: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用GRUB 2.02
GRUB 启动阶段
1.primary boot loader :
1st stage:MBR的前446个字节 引导 硬件去找 内核
1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
2.secondary boot loader :2nd stage,分区文件/boot/grub2/grub.cfg
1.4加载Linux内核
操作系统 调度硬件
把内核和镜像文件系统加载到内存中 可以使用
1.5init进程初始化
启动程序:
centos7 启动的第一个程序 systemd
centos6 启动的第一个程序 init
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
二、 解决系统启动时故障
2.1修复mbr扇区故障
故障原因:
- 病毒、木马的等造成的破坏;
- 不正确的分区操作、磁盘读写误操作等。
故障现象:
- 找不到引导程序,启动中断;
- 无法加载操作系统,开机后黑屏。
解决思路:
- 提前添加一块新硬盘;
- 提前做好备份文件(将MBR扇区备份到另一块硬盘上);
- 以安装光盘引导进入急救模式;
- 从备份文件中恢复。
修复mbr分区
1.备份mbr引导扇区到其他磁盘
2.模拟破坏mbr引导扇区
3.引导镜像急救模式进行mbr扇区恢复
备份mbr扇区命令
[root@localhost ~]# mount /dev/sdb1 /mnt
[root@localhost data]# dd if=/dev/sda of=/mnt/MBR.bak count=1 bs=512 //备份sda系统盘
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.00025007 秒,2.0 MB/秒
dd 命令可以对硬盘空间进行备份
dd 命令格式:dd if=[输入文件] of=[输出文件] [选项]
##############################################################################
恢复mbr扇区命令
[root@localhost bak]# dd if=/mnt/MBR.bak of=/dev/sda count=512 bs=1
记录了512+0 的读入
记录了512+0 的写出
512字节(512 B)已复制,0.000579916 秒,883 kB/秒
实验
多块磁盘处理MBR分区故障
新建一块硬盘 将mbr 备份
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 59G 0 part ├─centos-root 253:0 0 38.3G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] └─centos-home 253:2 0 18.7G 0 lvm /home sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost ~]# fdisk /dev/sdb //在sdb磁盘中做新分区 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xa0a65f07 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 59G 0 part ├─centos-root 253:0 0 38.3G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] └─centos-home 253:2 0 18.7G 0 lvm /home sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 10G 0 part //完成创建主分区sdb1 sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sr0 11:0 1 4.2G 0 rom [root@localhost ~]# mkfs.xfs /dev/sdb1 //格式化 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@localhost ~]# mount /dev/sdb1 /mnt //把sdb1挂载在mnt下 [root@localhost ~]# ls /mnt/ [root@localhost ~]# dd if=/dev/sda of=/mnt/mbr.bak count=1 bs=512 记录了1+0 的读入 记录了1+0 的写出 512字节(512 B)已复制,0.000312697 秒,1.6 MB/秒 [root@localhost ~]# hexdump -C -n 512 /mnt/mbr.bak 00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................| 00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p| 00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......| 00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..|| 00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u| 000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..| 000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f| 000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.| 000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.| 000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....| 000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........| 00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.| 00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.| 00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..| 00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....| 00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.| 00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........| 00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.| 00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .| 00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R| 00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......| 000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........| 000001b0 00 00 00 00 00 00 00 00 dd 53 0a 00 00 00 80 20 |.........S..... | 000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...| 000001d0 29 82 8e fe ff ff 00 08 20 00 00 f8 5f 07 00 00 |)....... ..._...| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200
模拟破坏
急救模式 1
完成以上的步骤,就成功修复mbr分区的故障
多台设备处理MBR分区故障
1.先把设备1中的/dev/sda备份到/mnt下
[root@localhost ~]# dd if=/dev/sda of=/mnt/mbr.bak count=1 bs=512 记录了1+0 的读入 记录了1+0 的写出 512字节(512 B)已复制,0.000241894 秒,2.1 MB/秒 ####把sda备份到mnt下并重命名为mbr.bak [root@localhost ~]# ls /mnt mbr.bak ####查看mnt下是否成功建立mbr.bak文件 [root@localhost ~]# hexdump -C -n 512 /mnt/mbr.bak //查看是否拷贝成功 00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................| 00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p| 00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......| 00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..|| 00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u| 000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..| 000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f| 000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.| 000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.| 000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....| 000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........| 00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.| 00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.| 00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..| 00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....| 00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.| 00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........| 00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.| 00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .| 00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R| 00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......| 000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........| 000001b0 00 00 00 00 00 00 00 00 dd 53 0a 00 00 00 80 20 |.........S..... | 000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...| 000001d0 29 82 8e fe ff ff 00 08 20 00 00 f8 5f 07 00 00 |)....... ..._...| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200
2.使用scp命令把备份好的文件发送到设备2
3.破坏设备1中/dev/sda文件来模拟MBR分区故障
4.重启设备1选择进入急救模式
5.将IP地址临时修改成与设备2的IP地址为同一个网段
6.将设备2的/mnt/mbr.bak文件重新拷贝回设备1中
7.将之前被破坏的/dev/sda文件用备份文件恢复
8.重启设备1即可
2.2修复grub分区
故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.cfg文件丢失、引导配置有误
故障现象
- 系统引导停滞,显示“grub>”提示符
解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向 MBR 扇区中重建grub程序
实验GRUB引导故障
1.将/boot/grub2文件下grub.cfg转移到data文件夹下,来模拟grub.cfg文件丢失的GRUB引导故障
2.重新启动,在读条界面按 Esc 键(只有0.5秒时间,且只能按一次)进入启动菜单,改用光驱启动
3重新配置grub.cfg文件
4.reboot重启设备
2.3遗忘root用户密码
故障原因
遗忘root用户的密码
故障现象
无法进行需要root权限的管理操作
若没有其他可用帐号,将无法登录系统
解决思路
进入急救模式,重设密码
实验
情况一:有光驱的情况下,借助光驱里面的操作系统来修改密码,使用光驱启动,进入急救模式。
2.进入自己的系统之后的命令
passwd #修改密码
情况二:没有光盘的情况下
启动时任意键暂停启动 按e键进入编辑模式 将光标移动linux 开始的行,添加内核参数 rd.break 按ctrl-x启动 mount –o remount,rw /sysroot chroot /sysroot passwd root #如果SELinux是启用的,才需要执行下面操作,如没有启动,不需要执行 touch /.autorelabel exit reboot ############################################################# 启动时任意键暂停启动 按e键进入编辑模式 将光标移动linux 开始的行,改为 rw init=/sysroot/bin/sh 按ctrl-x启动 chroot /sysroot passwd root #如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行 touch /.autorelabel exit reboot
1.启动时按任意键暂停启动,之后按e键进入编辑模式。
2.将光标移动linux 开始的行,添加内核参数 rd.break,按“ctrl+x”启动
3.重新挂载并修改权限
4.切换根目录,修改密码,exit退出系统根目录
三、服务
服务程序
1.本地服务程序,管理本机
systemd:管理式
叫醒服务init
2.网络服务程序,接待网络上的客户
1.系统必要的程序
2.yum rpm 安装的程序
3.编译安装的程序,需要 手写 配置文件后才可以
3.1运行级别所对应的Systemd目标
运行级别 | systemd的目标 | 说明 |
init 0 | target | 关机 |
init 1 | rescue.target | 单用户模式,不需要密码,多用于系统维护 |
init 2 | Multi-user.target | 用户定义/域特定运行级别,默认等同于3 |
init 3 | Multi-user.target | 字符界面的完整多用户模式,大多服务器主机运行在此级别 |
init 4 | Multi-user.target | 用户定义/域特定运行级别,默认等同于3 |
init 5 | Graphical.target | 图形界面的多用户模式 |
init 6 | Reboot.target | 重新启动 |
3.2systemd单元类型
systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型。
单元类型 | 护展名 | 说明 |
Service | .service | 护展名,描述一个服务系统 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automoun | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Path | .path | 描述一个文件系统中文件或目录(path 路径) |
Snapshot | .snapshot | 用于保存一个systemd的状态(snapshot 快照) |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元(target 目标) |
3.3systemctl 命令
systemd 进行管理的时候的命令
systemctl start 服务名 | 开启服务 |
systemctl stop 服务名 | 关闭服务 |
systemctl status 服务名 | 查看服务 |
systemctl restart 服务 | 重启服务 |
systemctl reload 服务 | 重新加载服务,不影响客户使用 |
systemctl ehable 服务 | 开机自启 |
systemctl disable 服务 | 关闭开机启动 |
systemctl enable --now 服务 | 开机自启,并立即启动 |
systemctl disable --now服务 | 关闭开机自启,并立即关闭 |
systemctl damon reload |
3.4service unit文件格式
unit格式说明:
作用:主要用来描述此软件的功能,man帮助,依赖关系等等
- 以 “#” 开头的行后面的内容会被认为是注释
- 相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
- 时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit file文件通常由三部分组成:
- [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
- [Service]:与特定类型相关的专用选项;此处为Service类型
- [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
1. simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
2. forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
3. oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
4. dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
5. notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
6. idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
- EnvironmentFile:环境配置文件
- ExecStart:指明启动unit要运行命令或脚本的绝对路径
- ExecStartPre: ExecStart前运行
- ExecStartPost: ExecStart后运行
- ExecStop:指明停止unit要运行的命令或脚本
- Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
- RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
- PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
用systemd管理 写service文件
yum -y install pcre-devel zlib-devel gcc gcc-c++ make #安装依赖关系
[root@localhost ~]# cd /opt #切换到opt
[root@localhost opt]# wget http://nginx.org/download/nginx-1.18.0.tar.gz #官网下载源码包
--2024-04-17 15:51:33-- http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2600::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz”
100%[====================================================>] 1,039,530 780KB/s 用时 1.3s
2024-04-17 15:51:35 (780 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])
[root@localhost opt]# tar xf nginx-1.18.0.tar.gz #解压安装包
[root@localhost opt]# ls
a b fstab nginx-1.18.0 nginx-1.18.0.tar.gz passwd rh shadow
[root@localhost opt]# cd nginx-1.18.0/ #切换到nginx中
[root@localhost nginx-1.18.0]# ./configure --prefix=/apps/nginx #检测环境,指定安装目录为/apps/nginx
[root@localhost nginx-1.18.0]# make -j2 #编译 -j2 2个核心编译
[root@localhost nginx-1.18.0]# make install #将软件安装进指定的路径
[root@localhost nginx-1.18.0]# ln -s /apps/nginx/sbin/nginx /usr/local/bin/ #建立软连接
[root@localhost nginx-1.18.0]# vim /lib/systemd/system/nginx.service #手写.service文件
[Unit]
Description=The nginx HTTP and reverse proxy server
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid #pid文件位置
ExecStart=/apps/nginx/sbin/nginx #指明启动unit要运行命令的绝对路径
ExecReload=/apps/nginx/sbin/nginx -s reload
ExecStop=/usr/bin/kill -s TERM ${MAINPID} #指明关闭unit要运行命令的绝对路径
[Install]
WantedBy=multi-user.target #被字符界面所依赖
[root@localhost nginx-1.18.0]# systemctl daemon-reload #重新加载配置
[root@localhost nginx-1.18.0]# systemctl start nginx #开启服务
[root@localhost nginx-1.18.0]# systemctl status nginx #查看服务状态
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2024-04-17 16:05:55 CST; 14s ago
Process: 4938 ExecStart=/apps/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 4940 (nginx)
CGroup: /system.slice/nginx.service
├─4940 nginx: master process /apps/nginx/sbin/nginx
└─4941 nginx: worker process
4月 17 16:05:55 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse pr.....
4月 17 16:05:55 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse pro...r.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost nginx-1.18.0]# systemctl stop nginx #关闭服务
[root@localhost nginx-1.18.0]# systemctl status nginx #查看服务状态
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead)
4月 17 16:05:55 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse pr.....
4月 17 16:05:55 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse pro...r.
4月 17 16:06:29 localhost.localdomain systemd[1]: Stopping The nginx HTTP and reverse pr.....
4月 17 16:06:29 localhost.localdomain systemd[1]: Stopped The nginx HTTP and reverse pro...r.
Hint: Some lines were ellipsized, use -l to show in full.
Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
3.5chkconfig工具:管理服务工具
格式: chkconfig --list [服务名称]
chkconfig --add 服务名称
chkconfig --level 级别列表服务名on/off
chkconfig --add httpd
chkconfig --level 35 httpd on
加到服务中? yum -y install pcre-devel zlib-devel gcc gcc-c++ make #依赖包,编译软件 cd /opt tar zxvf nginx-1.120.tar.gz -C /opt cd nginx-1.120 ./configure \ --prefix=/usr/local/nginx \ #安装路径 --user=nginx \ #指定用户名 指定谁来管理他 --group=nginx \ #指定用户组 --with-http_stub_status_module #启用此模块支持状态统计 ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module useradd -M -s /sbin/nologin nginx #创建管理用户 make && make install #编译安装 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #这步可以不做,做软链接,让系统可以直接使用 cat /usr/local/nginx/logs/nginx.pid #查看nginx进程号,便于停止 停止 kill -3 进程号 vim /etc/init.d/nginx #写一个脚本 #!/bin/bash #chkconfig: - 99 20 #description:Nginx Service Control Script PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG ;; stop) kill -s QUIT $(cat $PIDF) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0 chmod +x /etc/init.d/nginx #给脚本加上权限 ss -ntap |grep nginx #查看服务有没有启动 chkconfig --add nginx #将服务加入 chkconfig --list nginx #查看服务 chkconfig --level 35 nginx on #开启3和5自动开启