首页 > 系统相关 >Linux引导和服务

Linux引导和服务

时间:2023-02-02 08:44:19浏览次数:41  
标签:引导 systemd 服务 service 启动 -- nginx systemctl Linux


引导和服务
引导过程
1.开机自检
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移 交系统控制权,大多时候会移交给本机硬盘。 网络启动 加载 网络批量pxe

2. MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)。
总结:运行放在MBR扇区里的启动 GRUB引导程序

3.GRUB菜单 系统类型双西雅图 内核文件 默认值
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

4. 加载Linux内核 操作系统 调度硬件
Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过 程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中 可以使用

5. init进程初始化 这是linux 系统运行的第一个程序
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录
总结:加载硬件驱动程序,内核把init进程加载到内存中运行

传统init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢 排队
systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度 大家一起

systemd服务
1.对比5 6 可以解决依赖关系并行启动

2.按需启动

3.自动解决依赖关系

负责在系统启动或运行时,激活系统资源,服务器进程和其它进程

Systemd新特性

系统引导时实现服务并行启动

按需启动守护进程

自动化的服务依赖关系管理

同时采用socket式与D-Bus总线式激活服务

socket与服务程序分离

向后兼容sysv init脚本

使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,

systemctl无法与之通信和控制

系统状态快照

systemd 核心概念:unit

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听

socket、保存的系统快照以及其它与init相关的信息

在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
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 目标)

[root@localhost ~]#systemd-analyze blame
#启动过程 生成网页systemd-analyze plot > boot.html

ll /usr/lib/systemd/system
#查看system的文件位置

 

 


[root@localhost ~]# systemctl -t help
Available unit types:
service
socket
busname
target
snapshot
device
mount
automount
swap
timer
path
slice
scope
[root@localhost ~]# ls /usr/lib/systemd/system
abrt-ccpp.service plymouth-poweroff.service
abrtd.service plymouth-quit.service
abrt-oops.service plymouth-quit-wait.service
abrt-pstoreoops.service plymouth-read-write.service
abrt-vmcore.service plymouth-reboot.service
abrt-xorg.service plymouth-start.service
accounts-daemon.service plymouth-switch-root.service
alsa-restore.service polkit.service
alsa-state.service postfix.service
alsa-store.service poweroff.target
anaconda-direct.service poweroff.target.wants
anaconda-nm-config.service printer.target
anaconda-noshell.service proc-fs-nfsd.mount
anaconda-pre.service proc-sys-fs-binfmt_misc.automount
anaconda.service proc-sys-fs-binfmt_misc.mount
[email protected] psacct.service
anaconda-sshd.service qemu-guest-agent.service
anaconda.target quotaon.service
[email protected] radvd.service
arp-ethers.service rc-local.service
atd.service rdisc.service
auditd.service rdma-ndd.service


#########system#####################
############unit 格式说明:#################
以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,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进程启动类型
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/目录

Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务

对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl daemon-reload
你已经 用程序的绝对路径启动过了

#自制systemctl 管理文件
[root@localhost ~]#vim /lib/systemd/system/hello.service
[Unit]
Description=Hello World
[Service]
TimeoutStartSec=0
ExecStart=/bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/bin/kill sh
[Install]
WantedBy=multi-user.target
[root@localhost ~]#systemctl daemon-reload
[root@localhost ~]#systemctl status hello.service
● hello.service - Hello World
Loaded: loaded (/usr/lib/systemd/system/hello.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2022-03-01 00:40:54 CST; 6s ago
Main PID: 20993 (sh)
CGroup: /system.slice/hello.service
├─20993 /bin/sh -c while true; do echo Hello World; sleep 1; done
└─21005 sleep 1

3月 01 00:40:54 localhost.localdomain systemd[1]: Started Hello World.
3月 01 00:40:54 localhost.localdomain systemd[1]: Starting Hello World...
3月 01 00:40:54 localhost.localdomain sh[20993]: Hello World
3月 01 00:40:55 localhost.localdomain sh[20993]: Hello World
3月 01 00:40:56 localhost.localdomain sh[20993]: Hello World
3月 01 00:40:57 localhost.localdomain sh[20993]: Hello World
3月 01 00:40:58 localhost.localdomain sh[20993]: Hello World
3月 01 00:40:59 localhost.localdomain sh[20993]: Hello World
3月 01 00:41:00 localhost.localdomain sh[20993]: Hello World


修复mbr分区
1.备份mbr引导扇区到其他磁盘

2.模拟破坏mbr引导扇区

3.引导镜像急救模式进行mbr扇区恢复

ip a a 192.168.100.100 dev ens33
配置IP地址
scp 192.168.100.100:/mbr.bak .
dd if=./mbr.bak of=/dev/sda bs=512 count=1


mkdir /bak
mount /dev/sdb1 /bak
dd if=/bak/mbr.bak of=/dev/sda


#备份MBR分区表
dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
scp /data/dpt.img 10.0.0.102:
#破坏MBR分区表
[root@centos8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
#无法启动
[root@centos8 ~]#reboot
#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络
#ifconfig ens160 10.0.0.8/24
#ip a a 10.0.0.8/24 dev ens160
#scp 10.0.0.102:/root/dpt.img ./
#恢复MBR分区表
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#reboot


新建一块硬盘 将mbr 备份

模拟破坏

急救模式 1

mkdir 、/bak
挂载硬盘
dd 还原

修复grub分区
rm -rf /boot/grub2/grub.cfg 配置文件
#模拟删除grub.cf 文件

进入急救模式,选择1 继续

chroot /mnt/sysimage
#进入急救模式后,更改环境

grub2-install /dev/sda
#重新建立加载sda分区

grub2-mkconfig -o /boot/grub2/grub.cfg
#重新构建grub菜单配置文件
修改密码
chroot /mnt/sysimage
#进入急救模式后,更改环境
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
设置运行级别
命令格式:

systemctl [command] [unit.target]
command参数:

  get-default :取得当前的target

  set-default :设置指定的target为默认的运行级别 3 5

  isolate :切换到指定的运行级别

  unit.target :上面列出的运行级别

示例:

 

init 0 systemctl isolate poweroff.target systemctl poweroff poweroff
init 1 systemctl isolate rescue.target
init 3 systemctl isolate multi-user.target
init 5 systemctl isolate graphical.target 图形
init 6 systemctl isolate reboot.target systemctl reboot reboot


0:关机
1:单用户模式(root自动登录), single, 维护模式
2:多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启

systemctl get-default
#获得当前的运行级别
systemctl set-default multi-user.target
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
#设置默认的运行级别为mulit-user
systemctl isolate multi-user.target
#在不重启的情况下,切换到运行级别mulit-user下
systemctl isolate graphical.target
#在不重启的情况下,切换到图形界面下

 

systemctl 7 管理工具
chkconfig 6 工具


/etc/init.d
chkconfig工具:
格式: chkconfig --list [服务名称]
chkconfig --add 服务名称
chkconfig --level 级别列表服务名on/off 0-6 7个级别 on off
chkconfig --add httpd
chkconfig --level 35 httpd on

#!/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


[root@localhost init.d]#ls /etc/rc*.d/
#S开头启用
[root@localhost init.d]#chkconfig --level 3 nginx on


vim

chkconfig
chkconfig工具:
格式: chkconfig --list [服务名称]
chkconfig --add 服务名称
chkconfig --level 级别列表服务名on/off
chkconfig --add httpd
chkconfig --level 35 httpd on

什么需要加入服务中 便于管理 习惯 写脚本
编译安装,不会 生成脚本,单元文件,需要手动编写

写脚本,复制yum 单元

 

 

加到服务中?
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 && makeinstall
#编译安装
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自动开启

 

 

 

localectl set-locale LANG=zh_CN.utf8
#设置系统语言为中文
localectl set-locale LANG=en_US.utf8
#设置系统语言为英文


localectl [status ]
#查看当前系统使用的语言

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自动开启

localectl set-locale LANG=zh_CN.utf8
#设置系统语言为中文
localectl set-locale LANG=en_US.utf8
#设置系统语言为英文

localectl [status ]
#查看当前系统使用的语言

标签:引导,systemd,服务,service,启动,--,nginx,systemctl,Linux
From: https://www.cnblogs.com/sj5426/p/17084737.html

相关文章

  • Linux系统Shell脚本第四章:shell函数
    目录一、shell函数1、函数的作用2、函数使用步骤3、定义函数基本格式4、函数变量5、退出函数6、函数位置变量与脚本位置变量区别 一、shell函数1、函数的作用定......
  • 微服务杂谈
    一、Ribbonribbon负载均衡策略   配置方法:1,代码方式:配置的是当前服务调用其他服务的负载均衡规则(不能指定具体调用哪个服务器的规则)。修改时需要重新打包......
  • 关于xxl-job中的慢sql引发的磁盘I/O飙升导致拖垮整个数据库服务
    背景:某天突然发现服务探测接口疯狂告警、同时数据库CPU消耗也告警,最后系统都无法访问;查看服务端日志,发现大量的报错如下:CommunicationsException:Communicationslink......
  • 清理云服务器挖矿病毒kdevtmpfsi和kinsing
    [root@VM-12-13-centosstep-gateway]#crontab-l#secu-tcs-agentmonitor,installatSunMar1317:00:40CST2022*****/usr/local/sa/agent/secu-tcs-agent......
  • 关于STM32CubeIDE无法正常启动GDB服务端的解决办法
    关于STM32CubeIDE无法正常启动GDB服务端的解决办法有时,可能STM32CubeIDE会报错,如下图FailedtostartGDBserver。而且点击Details也只能得知“ST-LINK初始化失败”......
  • 63linux安装and卸载mysql
    配置腾讯云+centos7卸载mysql1.rpm-qa|grep-imysql2.rpm-e--nodeps上面查询的结果(全部要删除)安装MySQL8以下版本1.在root目录下,安装mysql和m......
  • Linux 几个图片编辑工具
    linux上没有snipaste类似的工具,真遗憾。Krita比较专业的工具,类似于photoshopPinta有箭头,比较方便,但是UI对高分屏支持不太好。文字只能输入英文KolorPaint除了直......
  • TQ2440(S3C2440)移植Linux-4.0.1内核全过程
    TQ2440(S3C2440)移植Linux-4.0.1内核全过程文件系统yaffs2下载地址:​​https://yaffs.net/get-yaffs​​​linux内核下载地址:​​https://mirror.bjtu.edu.cn/kernel/linux/......
  • 嵌入式Linux中Makefile万能写法
    嵌入式Linux中Makefile万能写法对于linux系统中使用gcc进行编译:#列出当前目录下所有*.c文件SRC:=$(wildcard*.c)#将所有*.c文件转为*.o文件OBJ:=$(patsubst%.c,%.o......
  • Linux 中使用 echo 修改用户密码
    前戏使用echo命令,可以实现很方便、快捷地修改用户密码使用方法语法#echopassword|passwd--stdinusername示例#echo"123456"|passwd--stdinrootChangingpasswor......