断电重启之后服务器都有哪些服务需要重启
断电之后服务器重启服务思路
- 首先基础服务配置了断电之后重新启动(比如数据库、redis等)
- 其次需要启动项目相关的服务
- 基本上就是这个思路,理论上不管是基础服务还是项目相关的服务均应该对断电之后做重启等服务启动和检查策略,由于是测试环境,所以暂时目前没有做这个,生产环境肯定是做了这个措施的
遇到的问题
- 当所有服务都启动了之后,发现个别项目相关的服务前端还是访问不了,然后就开是分析原因
- 第一开始想到的是端口占用,但是,仔细一想不应该呀,这些都是以往正常能启动的服务,怎么能端口占用呢,所以排除
- 最后我看nginx的配置文件,以为谁修改了nginx的配置文件,但是也没有
- 后来我准备重新加载一下nginx的配置文件,于是执行
nginx - s reload
,结果报错nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)
,然后根据这个错误分析有以下三种情况:
- Nginx 配置文件中指定的 PID 文件路径不正确或不存在
- Nginx 尚未启动,因此没有创建 PID 文件
- Nginx 曾经异常退出,没有正确清理 PID 文件
- 然后最先检查的是服务有没有启动,执行
systemctl status nginx
检查nginx服务状态,返回nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: inactive (dead)
9月 12 11:16:40 dev102 systemd[1]: nginx.service: Unit cannot be reloaded because it is inactive.
其中关键信息是Unit cannot be reloaded because it is inactive
,所以就找到原因了,确定nginx服务没有启动,于是执行命令systemctl start nginx
,启动nginx服务,所有服务访问正常,问题解决。正常这个nginx服务是会重启的,这次并没有重启,问题后续还需分析。
linux命令之systemctl命令
systemctl
是一个命令行工具,它是 systemd
系统和服务管理器的接口。在基于systemd
的Linux
系统中,systemctl
命令用于管理系统和服务状态。以下是你可以用 systemctl
做的一些事情:
服务管理
- 启动服务:systemctl start [service_name]
- 停止服务:systemctl stop [service_name]
- 重启服务:systemctl restart [service_name]
- 重载服务配置而不中断服务:systemctl reload [service_name]
- 使服务开机自启:systemctl enable [service_name]
- 禁用服务开机自启:systemctl disable [service_name]
- 查看服务状态:systemctl status [service_name]
单元管理
Systemd 的基本管理单位是“单元”(unit),单元可以是服务(.service),也可以是其他如挂载点(.mount)、设备(.device)等。
- 列出所有单元:systemctl list-units
- 列出所有失败的单元:systemctl --failed
系统管理
- 重启系统:systemctl reboot
- 关闭系统:systemctl poweroff
- 进入休眠状态:systemctl suspend
- 进入混合睡眠状态(同时支持休眠和挂起):systemctl hibernate
- 进入紧急模式(单用户模式):systemctl emergency
日志管理
- 查看系统日志:journalctl
- 查看某个服务的日志:journalctl -u [service_name]
systemd
和 systemctl
提供了一种比传统的 init
系统更现代、更高效的方式来管理系统和服务。它具有许多特性,如并行启动服务以加快速度、依赖性管理以确保服务以正确的顺序启动、按需启动守护进程、系统状态快照、系统和服务管理的能力等。