ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

一篇文章搞定Linux服务管理问题,了解在Linux下服务是怎样启动的

2021-05-01 22:01:59  阅读:201  来源: 互联网

标签:搞定 服务 service 启动 systemd etc init Linux


起因是在Centos 7上设置一个开机自启动脚本,查询资料时发现,linux发行版引入systemd后,导致目前网上关于服务管理方面的知识相对比较杂乱,所以在此做以整理,如有错误之处,烦请指正。

Linux服务管理命令

Linux服务分类

在学习Linux服务管理命令前,需要对Linux的服务有一定的了解。目前Linux服务的具体分类方式如下表:

Linux服务分类 RPM/Deb包安装的默认服务 独立的服务 基于xinet服务:现在很少用到,只做了解 源码包安装的服务

RPM、Deb包默认安装的服务

RPM包是红帽子(Redhat)下发行版使用的软件安装包,如Centos;Deb包是Debian下发行版使用的软件安装包,如Ubuntu。
他们的安装目录

/etc配置文件安装目录
/usr/bin可执行的命令安装目录
/usr/lib程序使用的函数库保存位置
/usr/share/doc基本的软件使用手册保存位置
/usr/share/man帮助文件保存位置

独立的服务

独立启动的守护进程:stand-alone,每个特定服务都有单独的守护进程,这个处理单一服务的始终存在的进程就是独立启动的守护进程。

服务始终处于后台内存中,等待被调用。可以自行启动,不需要依赖其他的管理服务。优点是客户端请求访问时,独立服务的响应更快速响应速度快,缺点是耗费资源。

目前大多数服务都是独立的服务。

基于xinetd的服务

超级守护进程:多个服务统一由一个进程管理,该进程可以管理多个服务。

即服务不能独立启动,必须依靠管理服务(xinetd)来调用这种服务。优点是当有客户端发起请求时,先请求xinetd服务,由xinetd服务去唤醒响应的服务,占用的资源相对较少,缺点是响应速度较慢。

目前较新的linux发行版已经很少用xinetd服务,如需使用要手动安装:

sudo yum -y install xinetd
sudo apt -y install xinetd

源码包安装的服务

源码包一般由用户手动下载源码,解压编译,安装在指定的位置中,一般是/usr/local/目录或/opt/目录,根据用户习惯选择。

关于软件包和源码包的具体区别此处不做赘述,想进一步了解的自行查找相关资料

在服务管理方面的区别主要是:
rpm/deb安装的服务可以用系统服务管理命令(service、systemcal、chkconfig)进行管理
源码包安装的服务一般不能被服务管理命令识别(注:有办法实现)

Linux服务管理

Linux服务启动经历过很长的一段时间发展,可以简化为三个阶段,即:

Linux服务启动 systemV init 传统的init,大多数的linux发行版都会兼容 管理命令为:service\chkconfig Upstart ubuntu曾经使用的init Systemd 新出现的init,很多linux发行版都已经或者计划转向Systemd 管理命令为:systemd

运行级别说明

运行级别说明systemV init命令systemd命令
0关机状态,使用该级别将会关机init 0poweroff
1系统救援模式,多用于系统维护init 1systemctl isolate rescue.target
2字符界面的多用户模式(不可访问网络)init 2systemctl isolate mutil-user.target
3字符界面的完整多用户模式,大多数服务器主机运行此级别init 3systemctl isolate mutil-user.target
4未分配使用init 4systemctl isolate mutil-user.target
5图形界面的多用户模式,提供了图形桌面操作环境init 5systemctl isolate graphical.target
6重新启动主机init 6reboot

查看运行级别:

  • runlevel : 显示切换前的运行级别 和当前运行级别 (systemV init & systemd)
  • systemctl get-default : 显示当前运行级别 (systemd)

永久设置开机模式:

  • systemctl set-default multi-user.target 开机默认为文本模式
  • systemctl set-default graphical.target 开机默认为图形模式
  • 修改 /etc/inittab 默认运行级别配置文件

systemV init

Linux启动流程

开机自检 MBR引导 GRUB菜单 加载内核 init进程初始化

init进程启动过程

  1. 读取配置文件 /etc/inittab
  2. 调用执行/etc/rc.d/rc.sysinit
    启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统;加载并初始化硬件模块.
  3. 执行缺省的运行级别模式
    inittab文件会告诉init进程要进入什么运行级别,在哪里可以找到该运行级别的配置文件.
  4. 执行/etc/rc.d/rc.local脚本文件

在非systemV init启动的Linux发行版中,没有rc.d目录。
读取inittab文件会提示:在这里插入图片描述

Init 进程的配置文件

参数说明
/etc/init.d/服务启动脚本配置文件存放目录
/etc/inittab默认运行级别配置文件
/etc/init/rcS.conf系统初始化配置文件
/etc/init/rc.conf各运行级别初始化的配置文件
/etc/init/rcS-sulogin.conf单用户模式启动 /sbin/sushell 环境的配置文件
/etc/init/control-alt-delete.conf终端下的 ctrl+alt+del 热键操作的配置文件
/etc/sysconfig/inittty终端的配置文件
/etc/init/start-ttys.conf配置tty终端的开启数量、设备文件
/etc/init/tty.conf 或 /etc/init/serial.conf控制tty终端的开启

独立服务的启动方式:

/etc/init.d/独立服务名  start|stop|status|restart
service 独立服务名 start|stop|status|restart
chkconfig 命令:
	chkconfig --list [name] 服务列表[可根据实际需要,停掉不用服务]
	chkconfig --add  [name] 服务添加[如缺省,则从缺省的init脚本自动建立] 
	chkconfig --del  [name] 服务删除[并把相关符号连接从/etc/rc[0-6].d删除]
	chkconfig --level name <on|off|reset>  
	on    服务在改变运行级时的启动
	off   服务在改变运行级时的停止
	reset 指初始化服务信息
	level 指运行级别;比如235表示运行级别为2、3、5

在 service 管理下,程序安装的时候,会自动的在 /etc/init.d 目录添加一个配置文件。当我们使用 service 控制程序时,实际是在/etc/init.d/ 配置文件中去寻找次程序的可执行文件。

比如执行开启http的服务:service apache2 start 。此时service 就会开启 /etc/init.d/apache2 配置文件里面指向的 /usr/sbin/httpd 的可执行文件。
在这里插入图片描述
查看这个文件发现:
在这里插入图片描述

Init存在的问题

  • 启动时间长。init是串行启动,只有前一个进程启动完,才会启动下一个进程,
  • 启动脚本复杂。Init进程只是执行启动脚本,脚本需要自己处理各种情况,导致脚本内容变得很长。如apacha启动脚本共355行
    在这里插入图片描述
  • 无法处理服务之间的依赖关系。例如A依赖B,那么B启动之前需要先启动A,如果A无法启动,B也不应该启动,但由于 SysVinit 是顺序执行的,即使配置了先启动 A再启动B,A启动失败,B依然会被启动,从而导致服务异常。

Upstart

基于以上问题和其他种种原因,Ubuntu的开发人员重新设计并开发了一款全新的服务管理系统,即Upstart。

UpStart采用事件驱动模型,基于事件机制。Upstart 不仅能在运行级别改变的时候启动或终止服务,也能在接收到系统发生其他改变的信息的时候启动或终止服务。这些系统的改变就是“事件”

由于Debian已经决定使用systemd,所以对于Upstart这里不做详细介绍,如果想要详细了解Upstart具体流程,可以参考: 这篇文章.

Systemd

Linux启动流程

开机自检 MBR引导 GRUB2菜单 加载内核 Systemd进程初始化

Systemd进程的启动过程

  1. systemd 执行默认target 配置
  2. systemd 执行启动所依赖的目标basic.target和sysinit.target初始化系统
  3. systemd 启动multi-user.target 下的本机与服务器服务
  4. systemd 执行multi-user.target 下的/etc/rc.d/rc.local
    systemd通过rc-local.service来实现兼容。在启动时会判断/etc/rc.local是否存在并且是可执行的,如果满足条件,会把rc-local.service服务加入到default.target中

Systemd进程的配置文件

参数说明
/etc/systemd/system/default.target取代/etc/inittab文件配置,通常符号链接到 /lib/systemd/system/graphical.target
/run/systemd/system/系统执行过程中所产生的服务脚本所在目录
/etc/systemd/system/里面存放着不同级别的开启自启服务
/usr/lib/systemd/system/ 和 /lib/systemd/system/ (lib是/usr/lib的软链接 )每个服务最主要的启动脚本设置,类似于之前的 /etc/init.d/

独立服务的启动方式

systemctl 独立服务名 start|stop|status|restart
systemd 的一些常用命令:
列出所有可用单元 : systemctl  list-unit-files
列出所有运行的单元: systemctl list-unit-files | grep enabled 
列出所有可用服务:  systemctl list-unit-files  --type=service
列出所有运行的服务: systemctl list-unit-files  --type=service | grep enabled 
屏蔽httpd服务:systemctl  mask httpd

在 systemd管理下,程序在安装的时候,会自动的在 /usr/lib/systemd/system 目录添加一个配置文件,并将其链接到/etc/systemd/system/multi-user.target.wants中。当使用 systemctl 控制该程序时,实际是在**/etc/systemd/system/multi-user.target.wants/**配置文件中去寻找程序的可执行文件。

比如执行开启apache2服务:systemctl start apache2.service , systemctl 就会开启 apache2.service 配置里面指向的 /usr/sbin/httpd 可执行文件

在这里插入图片描述可见,程序链接到lib/systemd/system下的service文件

在这里插入图片描述查看apach2.service文件,其指向/usr/sbin下的可执行文件

systemctl命令管理systemd的资源Unit

systemd的Unit放在目录/usr/lib/systemd/system或/etc/systemd/system

.mount文件

在这里插入图片描述.mount文件定义了一个挂载点,[Mount]节点里配置了What,Where,Type三个数据项等同于以下命令:

mount -t hugetlbfs /dev/hugepages hugetlbfs

.service文件

在这里插入图片描述

.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节

[Unit]
Description:描述,
After:在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件
[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启
[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的

.target文件

在这里插入图片描述.target定义了一些基础的组件,供.service文件调用

.wants文件

在这里插入图片描述.wants文件定义了要执行的文件集合,每次执行,.wants文件夹里面的文件都会执行

xinetd服务启动方式

在/etc/xinetd.d中创建相关服务文件,如:

vim /etc/xinetd.d/telnet

重启xinetd服务
在这里插入图片描述

源码包服务启动方式

使用绝对路径,调用启动脚本启动(通常在安装软件时,可查看安装说明)

/usr/loacl/nginx/bin/nginx start|stop

注:可以通过创建软连接的方式,将启动文件链接到service或chkconfig或systemctl相关目录,从而被其识别,但一般不推荐使用,所以本文不做赘述。如有需要可自行查找资料。

标签:搞定,服务,service,启动,systemd,etc,init,Linux
来源: https://blog.csdn.net/qq_40963692/article/details/116331550

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有