本文最后更新于84 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
Linux 服务管理(systemd / daemon / service)
今日目标
今天学完你要掌握:
1、什么是 service(服务)
2、什么是 daemon(守护进程)
3、什么是 systemd
4、systemctl 常见命令
5、如何设置开机自启
6、如何查看服务日志
7、如何自己理解一个服务的生命周期
今天最重要的一句话:
服务 = 在后台长期稳定运行、提供功能的程序。
第一部分:什么是服务
比如:
你敲:
nginx
程序启动了。
它在后台持续运行。
监听:
80
443
等请求进来。
这就是服务。
再比如:
MySQL:
监听:
3306
长期运行。
等程序连接。
也是服务。
Redis:
监听:
6379
也是服务。
SSH:
监听:
22
让你远程登录。
也是服务。
所以服务本质:
长期运行 + 对外提供能力
常见服务
nginx Web服务
mysqld 数据库
redis 缓存
sshd 远程连接
docker 容器服务
kubelet K8s节点服务
cron 定时任务
第二部分:什么是 daemon
daemon(读作:低门)
中文:
守护进程
理解:
后台默默工作的进程。
你看不到界面。
一直运行。
例如:
nginx worker
mysqld
dockerd
sshd
都是 daemon。
特点:
长期运行
后台运行
通常监听端口
系统启动时自动启动
负责提供稳定服务
关系
程序:
nginx(二进制程序)
启动后:
变成进程:
nginx master
nginx worker
作为后台服务运行。
这就是 daemon。
第三部分:什么是 systemd
以前 Linux 服务管理很乱。
后来统一成:
systemd systemd。
可以理解成:
Linux 的总管家
负责:
启动服务
停止服务
开机自启
重启服务
查看状态
查看日志
管理依赖
管理资源限制
一句话:
systemd = Linux 服务总控中心
第四部分:systemctl(超级高频)
管理服务命令:
systemctl
以后天天用。
查看状态
查看 Nginx Nginx:
systemctl status nginx
看:
是否运行
启动时间
PID
日志
是否开机自启
看 Docker Docker:
systemctl status docker
看 SSH:
systemctl status sshd
启动
sudo systemctl start nginx
停止
sudo systemctl stop nginx
重启
sudo systemctl restart nginx
重载配置
sudo systemctl reload nginx
区别:
restart = 停掉再启动
reload = 不停服务,重新加载配置
生产环境更常用 reload(如果服务支持)。
查看是否开机自启
systemctl is-enabled nginx
输出:
enabled
说明开机启动。
如果:
disabled
不开机启动。
设置开机启动
sudo systemctl enable nginx
取消开机启动
sudo systemctl disable nginx
查看所有服务
systemctl list-units --type=service
看看系统都有哪些服务。
第五部分:service 文件(重点)
systemd 怎么知道怎么启动 nginx?
因为有:
service 文件。
一般在:
/usr/lib/systemd/system/
/etc/systemd/system/
比如:
nginx.service
docker.service
sshd.service
看看:
cat /usr/lib/systemd/system/nginx.service
会看到:
[Unit]
Description=nginx
[Service]
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill ...
[Install]
WantedBy=multi-user.target
里面定义:
怎么启动
怎么停止
怎么重载
开机什么时候启动
这非常重要。
以后自己写服务也会用。
第六部分:查看日志(结合 Day6)
查看某服务日志:
看 Nginx:
journalctl -u nginx
实时看:
journalctl -u nginx -f
最近 50 行:
journalctl -u nginx -n 50
如果服务启动失败:
第一时间:
journalctl -u 服务名
第七部分:Day10 实操
今天直接敲:
systemctl status sshd
systemctl status nginx
systemctl status docker
systemctl is-enabled sshd
systemctl list-units --type=service | head
journalctl -u sshd -n 20
如果有 nginx:
sudo systemctl restart nginx
sudo systemctl reload nginx
journalctl -u nginx -n 50
查看 service 文件:
cat /usr/lib/systemd/system/sshd.service
或者:
cat /etc/systemd/system/*.service
第八部分:大厂面试题
1)systemd 是什么?
答:
Linux 的系统和服务管理器,负责管理系统服务生命周期。
2)restart 和 reload 区别?
答:
restart 重启进程
reload 重新加载配置,不中断服务
3)怎么设置开机自启?
systemctl enable 服务名
4)服务启动失败怎么查?
顺序:
status
journalctl
配置检查
端口冲突
权限问题
依赖服务问题
5)daemon 是什么?
答:
在后台长期运行、持续提供服务的进程。
补充:排错部分
我会先通过 systemctl status 查看服务状态和报错信息;
然后通过 journalctl 或 error.log 查看详细日志;
接着检查端口是否被占用;
再检查配置文件是否正确;
之后检查文件权限;
确认服务是否正常监听;
最后再排查防火墙、安全组和网络问题。