linux系统学习(12.linux服务)
目录
一、linux服务介绍
1.什么是linux服务
2.服务的分类
1. 背景:为什么需要 socket 激活
2. systemd 的 socket 激活机制是什么
3. 工作原理(步骤)
3. 服务的安装位置
1. 服务程序本身(可执行文件)
2. systemd 的服务单元文件(.service 文件,服务的启动脚本)
3. 配置文件和数据
二、apt管理的服务的常用指令
一、linux服务介绍
1.什么是linux服务
-
定义:服务是系统长期运行的后台进程,通常由 **服务管理器(systemd、init、upstart 等)**来启动、管理。
-
特征:
-
常驻后台,通常 开机就启动,不需要用户手动运行。
-
提供某种功能或资源,供其他程序或用户使用。
-
由系统的 服务管理工具 (
systemctl
、service
) 管理。
-
例子:
-
sshd
:SSH 远程登录服务。 -
nginx
:Web 服务器服务。 -
cron
:定时任务服务。
2.服务的分类
对于从往上下载的服务,一般是软件包的一部分。所以可以按照软件包作为以下分类。
(1)对于独立的服务,直接加载到内存里面,响应速度比较快。
(2)xinetd服务,只有xinetd在内存中,他管理的其他服务需要在被访问的时候加载到内存,占用内存比较少。对于ubantu20.04,这个不适用了。systemd 用来取代 xinetd 的核心功能。我个人感觉和xinetd没啥区别,啊哈哈哈哈哈。
1. 背景:为什么需要 socket 激活
在早期,
xinetd
的作用就是:
不让每个网络服务都常驻内存。
而是由
xinetd
监听端口(比如 22、21、23 等)。当有客户端请求进来时,
xinetd
临时启动对应的服务进程,把 socket 交给它。服务处理完,再退出。
这样省内存、简化管理,但
xinetd
已经过时。systemd 就直接集成了类似的机制,叫 socket activation(套接字激活)。
2. systemd 的 socket 激活机制是什么
定义:
systemd 可以先创建并监听一个 socket(比如 TCP 端口 22),而对应的服务进程(比如sshd
)此时还没启动。
当有客户端请求到来时,systemd 自动启动服务,并把已经就绪的 socket 交给它处理。也就是说:
socket 先存在(由 systemd 管),服务可以后启动。
首次请求时才真正启动服务(懒加载)。
3. 工作原理(步骤)
systemd 读取两个 unit 文件:
xxx.socket
→ 定义要监听的 socket(端口/Unix socket)。
xxx.service
→ 定义服务如何启动。systemd 启动时,先激活
xxx.socket
,监听端口。此时服务进程还没跑起来。
当有连接到来,systemd 立即启动
xxx.service
,并把这个 socket 传递给它。服务接手后,继续处理客户端连接。
(3)源码包安装的服务,对于ubantu20.04,
安装源码包时,安装的内容通常是:
可执行程序(比如
/usr/local/bin/mydaemon
)库文件(比如
/usr/local/lib/…
)配置文件模板(比如
/usr/local/etc/mydaemon.conf
)文档
👉 注意:源码编译安装不会自动生成
.service
文件。
它只给你一个“可执行程序”,不会自动集成到 systemd。
所以对于ubantu来说,所有服务都让systemctl管理好了。自定义的服务写好放到对应的文件夹里面,重新加载服务,就可以让systemctl管理了。
3. 服务的安装位置
在 Ubuntu 20.04(以及大部分基于 systemd 的现代 Linux),服务本身和服务管理配置的位置是分开的:
1. 服务程序本身(可执行文件)
这是软件包安装的真正二进制文件,位置取决于你怎么安装:
APT 安装的软件
可执行文件通常在:
/usr/bin/
(一般命令行工具)
/usr/sbin/
(系统服务程序,如sshd
,nginx
)例如:
/usr/sbin/sshd /usr/sbin/apache2
源码编译安装的软件
默认会安装到
/usr/local/bin/
或/usr/local/sbin/
。例如:
/usr/local/sbin/mydaemon
2. systemd 的服务单元文件(.service 文件,服务的启动脚本)
这是告诉 systemd 如何管理服务的配置文件(并不是程序本身)。
系统自带/软件包提供的:
/lib/systemd/system/
例如:
/lib/systemd/system/ssh.service /lib/systemd/system/nginx.service
管理员自己添加/修改的:
/etc/systemd/system/
例如你写了一个自定义服务:
/etc/systemd/system/mydaemon.service
👉 systemd 启动服务时,读的就是这些
.service
文件,然后执行里面的ExecStart=
命令去启动真正的二进制。3. 配置文件和数据
大部分服务还会带有配置文件和数据目录:
配置文件:通常在
/etc/<服务名>
日志文件:通常在
/var/log/<服务名>
运行时数据:通常在
/var/lib/<服务名>
二、apt管理的服务的常用指令
查看所有服务:
systemctl list-unit-files --type=service
查看某个服务是否开机自启:
systemctl is-enabled ssh
设置服务开机自启:
sudo systemctl enable ssh
取消开机自启:
sudo systemctl disable ssh
立即启动/停止服务:
sudo systemctl start ssh sudo systemctl stop ssh
查看服务状态
sudo systemctl status ufw