Linux系统重启后,真正需要手动“启动”的不是系统服务,而是那些依赖手动运行的应用进程(比如Docker容器、Java服务、数据库实例),以及没有注册为开机自启的业务程序。 系统服务(SSH、网络、防火墙)通常由systemd自动拉起,你只需要检查确认,而不是逐个“点开”。
linux重启后需要启动哪些服务
如果你用的是CentOS 7、Ubuntu 16+这类主流发行版,绝大多数服务都交给systemd管理,重启之后,以下服务会自己“醒来”:
- SSH远程登录服务(sshd)
- 网络服务(network或NetworkManager)
- 防火墙(firewalld或ufw)
- 定时任务(crond)
- 系统日志(rsyslog)
你不需要手动启动它们,在一个终端里输入systemctl status sshd,只要看到active (running),说明它已经正常起来了。
哪些服务不会自动启动
真正需要你留神的是下面这几种:
- 临时启动的服务:比如你执行过
service httpd start,但从来没执行systemctl enable httpd,重启后它会归于寂静。 - 源码编译安装的服务:像编译安装的MySQL、Redis,没有写systemd unit之前,系统根本不知道它们的存在。
- 前台运行的进程:如果之前是开着终端跑
./app,终端一关进程就没了,重启自然更不会恢复。
业内专家指出,临时启动的服务是重启后最容易“失踪”的进程,排查的时候往往最后一个才想起它。
怎么判断一个服务会不会自动启动
用systemctl is-enabled命令可以判断:
systemctl is-enabled mysqld
返回enabled就代表开机自启,返回disabled就代表不会,这个方法适用于所有systemd管理下的服务。
linux服务器重启后服务自动启动设置
很多运维同事遇到的问题是:服务明明装好了,重启后却起不来,原因几乎都是没有设置自启,下面给出标准操作路径。
systemctl enable 让服务开机自启
以MySQL为例,一条命令同时完成启动和自启:
systemctl enable --now mysqld
如果你只想设置自启、暂不启动,可以去掉--now,取消自启用:
systemctl disable mysqld
Docker容器重启后自动启动
容器和普通服务不一样。docker服务本身会自动启动,但容器不会,要容器也自动拉起,需要在创建时指定策略:
docker run -d --restart=always --name web nginx
如果容器已经存在,可以更新它的策略:
docker update --restart=always web
这样docker服务启动后,容器就会跟着恢复。
数据库和中间件常见的自启坑
- MySQL用官方rpm包安装,自带
mysql.service,只需systemctl enable一次。 - Redis源码安装后,需要手动写一个
/etc/systemd/system/redis.service文件,再执行systemctl daemon-reload。 - Nginx如果用yum或apt安装,一般会自动注册服务,源码编译则可能需要修改配置文件中的pid路径。
行业共识认为,自启配置这一步最容易被忽略,但它恰恰是Linux重启后一切服务能否快速恢复的关键。
linux重启命令和Windows对比
Linux重启服务器有哪些影响?最直接的影响是所有进程被终止,然后在系统引导后按配置恢复,这一点和Windows既有相似之处,也有明显差异。
Linux最常用的三条重启命令:
reboot shutdown -r now systemctl reboot
Windows常用的是:
shutdown /r /t 0
区别在哪里?Linux的命令更强调权限和运行目标,普通用户没有权限执行,需要sudo或以root身份操作,Windows的shutdown在管理员命令行下运行更顺畅。
另一个差异是服务恢复逻辑,Windows重启后会恢复到系统快照状态,多数应用不会主动重启;Linux在重启后,systemd会按照依赖关系逐个拉起服务,所以如果你设置了自启,服务会自动恢复,这也就是为什么很多人说Linux重启比Windows“更省心”省心与否,取决于你有没有做好上面的自启配置。
重启前一定要做的4步检查
- 用
df -h确认根分区和业务分区没有写满。 - 用
uptime看当前负载,负载很高时不要贸然重启。 - 保存正在编辑的配置和代码,避免丢失。
- 如果有云监控,先在工单里申请运维窗口。
重启后如何快速检查服务是否正常
重启不是点一下“reboot”就完事,等服务器重新上线后,你需要按下面顺序确认。
Web服务检查
systemctl status nginx curl -I http://127.0.0.1
curl返回200,说明Web服务已经接受请求。
数据库服务检查
systemctl status mysqld mysqladmin ping -uroot -p
看到mysqld is alive,数据库进程就绪。
业务进程检查
ss -lntp ps aux | grep java
ss -lntp能看到监听端口,ps aux确认Java进程还在,如果端口没有监听,结合journalctl -u 服务名排查启动日志。
下面这个表格可以贴在本地运维手册里:
| 检查对象 | 命令 | 期望结果 |
|---|---|---|
| SSH | systemctl status sshd | active (running) |
| Nginx | curl -I http://localhost | HTTP/1.1 200 |
| MySQL | mysqladmin ping | mysqld is alive |
| Docker容器 | docker ps | 状态为Up |
关于linux重启的3个常见问题Q&A
Q1: linux重启后数据库需要手动启动吗?
如果安装包提供了systemd service,并且你执行过systemctl enable mysqld,重启后数据库会自动启动,如果是源码编译装在/usr/local/mysql下,或者没有写unit文件,重启后它不会自己起来,必须手动执行mysqld_safe或用systemctl start mysqld,生产环境建议把数据库纳入systemd管理,一个enable --now就能解决。
Q2: linux重启后怎么设置docker容器自动启动?
创建容器时加上--restart=always,已有的容器用docker update --restart=always 容器ID,这样宿主机重启后,docker服务先启动,然后容器自动拉起,注意--restart策略除了always还有on-failure,适合任务型容器。
Q3: 云服务器linux重启数据会丢失吗?
不会,云服务器的云盘属于持久化存储,重启操作只是关闭电源再重新开机,磁盘数据不会自动消失,真正丢数据的情况多数是误删除、云盘欠费或硬件故障,重启前可以用sync命令把内存中的改动刷新到磁盘,降低意外风险。
Linux重启后你真正要做的不是“启动服务器”,而是检查那些容易掉队的服务,把关键服务配置成自启,重启就不再是提心吊胆的事。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/713881.html


![[5分钟学linux] 31-生产环境服务器关机和重启的注意事项|设置默认启动级别-2022新linux极速入门教程 #科技猎手#](https://i1.hdslb.com/bfs/archive/42a615206ea7f8d582a81c1f1c0c3eac9afae3c1.jpg)


