服务基础之服务简单介绍(systemd)

Ava ·
更新时间:2024-09-20
· 594 次阅读

文章目录一、服务1.服务1.1 服务工作过程1.2 常见的tcp/ip协议1.3 Linux服务分类1.3.1 独立守护进程1.3.2 超级守护进程2.管理服务2.1 Systemd2.1.1 systemd概述2.1.2 简单说明2.1.3 单元文件2.1.4 systecmctl脚本2.1.5 配置文件目录2.1.6 修改系统中服务管理相关的默认配置如nginx.service的方法2.1.7 服务配置文件解读2.1.8 系统管理相关命令2.1.9 systemd相关操作2.1.10 systemd初始化流程2.2 (centos6)chkconfig2.3 (centos7)systemctl2.4 无服务控制脚本 一、服务 1.服务

服务是向外提供服务的进程,一般来说都会放在后台,不应该和终端关联

1.1 服务工作过程 提供服务的一端叫服务端,服务启动时需要监听对应的端口号 请求服务的一端叫客户端,客户端指定服务端的IP地址加端口号向服务端发起请求 服务端收到客户端的请求后分析数据包发现请求的端口是XX端口,内核根据哪个进程监听此端口将数据包发给对应的进程处理。处理完后将数据返回给客户端 1.2 常见的tcp/ip协议 软件用户接口分类 CLI(命令行界面) GUI(图形用户界面) ftp 文件传输协议 tcp 20,21 ssh tcp 22 telnet tcp 23 smtp tcp 25 dns tcp/udp 53 dhcp udp 67,68 http tcp 80 mysql tcp 3306 https tcp 443 redis tcp 6379 1.3 Linux服务分类 1.3.1 独立守护进程 独立守护进程是自行监听在后台的,基本所有服务都是独立守护类进程的服务 centos6上,独立守护进程的管理脚本都是sys V风格,放置在/etc/rc.d/init.d目录 1.3.2 超级守护进程 超级守护进程专指xinetd,xinetd本身是一个常驻内存的独立守护进程,它要监听来自外界对其管理的服务的请求。 xinetd进程管理服务 临时守护进程(telnet,rsync等)受两个配置文件的控制,一个是/etc/xinetd.conf提供的默认配置,一个是/etc/xinetd.d下针对某个服务的配置 临时守护进程的配置/etc/xinetd.d/rsync
service rsync { disable = no yes不启动,no启用 flags= IPv6 socket_type = stream tcp类型套接字 wait = no 单线程还是多线程,no多线程 user = root 服务进程执行者 server = /usr/bin/rsync 服务进程路径 server_args = --daemon 服务进程运行时参数 log_on_failure += USERID 连接失败记录日志,并添加USERID bind = ip_addr 监听地址 interface = ip_addr 同bind } 2.管理服务 2.1 Systemd 2.1.1 systemd概述

systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。

systemd是一个专用于 Linux 操作系统的系统与服务管理器。当作为启动进程(PID=1)运行时,它将作为初始化系统运行,也就是启动并维护各种用户空间的服务。

为了与传统的 SysV 兼容,如果将 systemd 以 init 名称启动,并且"PID≠1",那么它将执行 telinit 命令并将所有命令行参数原封不动的传递过去。 这样对于普通的登录会话来说,无论是调用 init 还是调用 telinit 都是等价的。

当作为系统实例运行时,systemd将会按照system.conf配置文件以及system.conf.d配置目录中的指令工作;当作为用户实例运行时,systemd 将会按照user.conf配置文件 以及 user.conf.d配置目录中的指令工作。

systemd将各种系统启动和运行相关的对象,表示为各种不同类型的单元(unit),并提供了处理不同单元之间依赖关系的能力。大部分单元都静态的定义在单元文件中,但是有少部分单元则是动态自动生成的:其中一部分来自于其他传统的配置文件(为了兼容性),而另一部分则动态的来自于系统状态或可编程的运行时状态。单元既可以处于活动(active)状态,也可以处于停止(inactive)状态,当然也可以处于启动中(activating)或停止中(deactivating)的状态。还有一个特殊的失败(failed)状态,意思是单元以某种方式失败了(进程崩溃了、或者触碰启动频率限制、或者退出时返回了错误代码、或者遇到了操作超时之类的故障)。当进入失败(failed)状态时,导致故障的原因将被记录到日志中以方便日后排查。需要注意的是,不同的单元可能还会有各自不同的"子状态",但它们都被映射到上述五种状态之一。

systemd的优点是功能强大、使用方便,缺点是体系庞大、非常复杂。事实上,现在还有很多人反对使用systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix哲学。
 

2.1.2 简单说明 systemd成为新的系统管理器,其最大的优点就是支持进服务并行启动,从而使效率大大提高; 同时它还具有日志管理、快照备份与恢复、挂载点管理等多种实用功能, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率; 但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多; 2.1.3 单元文件

单元配置文件包含有关以下项目的信息:服务、套接字、设备、安装点、自动安装点、交换文件或分区、启动目标、监控的文件系统路径、受 systemd 控制和监管的计时器、临时系统状态快照、资源管理部分或一组外部创建的进程

服务

进程相关信息(例如运行守护程序);文件以 .service 结尾

目标

用于将单元分组以及在启动期间用作同步点;文件以 .target 结尾

套接字

IPC 或网络套接字或文件系统 FIFO 相关信息,适用于基于套接字的激活(如 inetd);文件以 .socket 结尾

路径

用于触发其他单元(例如,在文件更改时运行服务);文件以 .path 结尾

计时器

受控制计时器相关信息,适用于基于计时器的激活;文件以 .timer 结尾

装入点

通常由 fstab 生成器自动生成;文件以 .mount 结尾

自动安装点

文件系统自动安装点相关信息;文件以 .automount 结尾

交换

内存分页的交换设备或文件相关信息;文件以 .swap 结尾

设备

sysfs/udev(7) 设备树中公开的设备相关信息;文件以 .device 结尾

范围/部分

有关分层管理一组进程的资源的概念;文件以 .scope/.slice 结尾

/usr/lib/systemd/system目录下查看

 
 

2.1.4 systecmctl脚本

/usr/lib/systemd/system

/usr/lib/systemd/user

2.1.5 配置文件目录

这三个目录是有优先级的,lib–>run–>etc,lib下的目录优先级最低,etc下的目录优先级最高;
当同一个内容出现在三个目录下时,优先级高的目录会覆盖优先级底的目录;
系统安装时,默认会将unit文件存放在/lib/systemd/system目录下;
/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录;
/run/systemd/system目录一般很少修改,除非是修改程序运行时的一些参数即Session级别的,才在该目录下做修改;

/lib/systemd/system /run/systemd/system /etc/systemd/system 2.1.6 修改系统中服务管理相关的默认配置如nginx.service的方法 在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置; 在/etc/systemd/system下面创建nginx.service.d目录;在创建的目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置,推荐这种做法; 2.1.7 服务配置文件解读 [root@Master system]# cat nginx.service [Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

配置文件分为三部分,

[Unit]

Description:服务的简单描述

Documentation:服务文档

After=:依赖,仅当依赖的服务启动之后再启动自定义的服务单元

[Service]

Type : 启动类型simple、forking、oneshot、notify、dbus

Type=simple(默认值):systemd认为该服务将立即启动,服务进程不会fork;如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型; Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功;对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可;使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程; Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务;可能需要同时设置 RemainAfterExit=yes使得systemd在服务进程退出之后仍然认为服务处于激活状态; Type=notify:与Type=simple相同,但约定服务会在就绪后向systemd发送一个信号,这一通知的实现由libsystemd-daemon.so提供; Type=dbus:若以此方式启动,当指定的BusName出现在DBus系统总线上时,systemd认为服务就绪;

PIDFile:pid文件路径

ExecStartPre:启动前要做什么,上文中是测试配置文件-t

ExecStart:启动

ExecReload:重载

ExecStop:停止

PrivateTmp:True表示给服务分配独立的临时空间

[Install]

WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁;

上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户; 每一个.target实际上是链接到我们单位文件的集合,当我们执行:

systemctl enable nginx.service

就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/nginx.service文件的链接; 当执行该命令后,nginx服务会随着开机而启动;

systemctl disable nginx.service

Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service. 该命令执行完成后会将/etc/systemd/system/multi-user.target.wants目录下的关于nginx.service的软连接取消; 2.1.8 系统管理相关命令

systemctl是systemd的主命令,用于管理系统和服务

systemctl reboot

systemctl poweroff

systemctl halt

systemctl rescue

systemd-analyze命令用于查看启动耗时

systemd-analyze 查看系统启动耗时

systemd-analyze blame 查看每个服务的启动耗时

systemd-analyze critical-chain 显示瀑布状的系统启动过程流

2.1.9 systemd相关操作 自启动 systemctl enable nginx.service 禁止自启动 systemctl disable nginx.service 启动服务 systemctl start nginx.service 停止服务 systemctl stop nginx.service 重启服务 systemctl restart nginx.service 查看Unit定义文件 systemctl cat nginx.service 编辑Unit定义文件 systemctl edit nginx.service 重新加载Unit定义文件 systemctl reload nginx.service 列出已启动的所有unit,就是已经被加载到内存中 systemctl list-units 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unit systemctl list-unit-files 查看服务的日志 journalctl -u nginx.service 还可以配合-b一起使用,只查看自本次系统启动以来的日志 查看所有target下的unit systemctl list-unit-files --type=target 查看默认target,即默认的运行级别。对应于旧的runlevel命令 systemctl get-default 设置默认的target systemctl set-default multi-user.target 查看某一target下的unit systemctl list-dependencies multi-user.target 切换target,不属于新target的unit都会被停止 systemctl isolate multi-user.target systemctl poweroff >>>关机 systemctl reboot >>>重启 systemctl rescue >>>进入rescue模式 2.1.10 systemd初始化流程 systemctl start|stop|status|restart sshd.service systemctl enable sshd.service systemctl disable sshd.service 2.2 (centos6)chkconfig

需要init.d目录下有LSB风格的服务控制脚本

chkconfig --list #查看服务在不同运行级别是否开机启动

chkconfig SERVICE_NAME on|off #默认修改2,3,4,5

管理当前服务

1.通过服务控制脚本 /etc/init.d/NAME start|stop|restart|reload|status

2.通过service命令 service NAME start|stop…
 

2.3 (centos7)systemctl

systemctl start|stop|status|restart sshd.service 启动,关闭,状态,重启服务

systemctl enable sshd.service 开机启动

systemctl disable sshd.service 开机不启动

2.4 无服务控制脚本

把服务进程放入rc.local使其开机自动运行

/usr/local/nginx/sbin/nginx

匡夆 原创文章 217获赞 54访问量 1万+ 关注 私信 展开阅读全文
作者:匡夆



systemd

需要 登录 后方可回复, 如果你还没有账号请 注册新账号