干这行最怕遇到啥?我排第一的是:大半夜服务器自己重启了(要么机房断电、要么系统更新),你还没反应过来,用户电话先来了——网站打不开了。急急忙忙登录一看,服务器好好的,就是Nginx、MySQL全都没起来。这种坑吧,说到底是开机自启没配好,服务没跟着系统一起启动。今天就把开机自启这点事给你整明白,让服务老老实实跟着服务器上班。

先看你的服务现在啥状态
现在主流的Linux都用systemd管服务,配自启就一条命令的事。先看看服务当前状态和自启情况:systemctl status nginx看服务状态,systemctl is-enabled nginx看它有没有设置开机自启。如果输出显示disabled,那说明它没被设置为开机启动,这就是重启后网站起不来的直接原因。顺带把MySQL、PHP-FPM这些也查一遍,别只盯一个。
设置开机自启,就这一条命令
把服务设为开机自启:systemctl enable nginx,然后systemctl start nginx先启动起来,别等重启才生效。想取消自启就systemctl disable。enable之后,可以用systemctl is-enabled确认一下,显示enabled就妥了。装完Nginx、MySQL这些服务,顺手把enable做了,这是新服务器配置的基本功,跟设root密码一个级别。
个别服务在enable的时候会提示找不到启动单元,那多半是没装好或者服务名写错了。用systemctl list-unit-files | grep 关键词查一下正确的服务名,比如MySQL有的系统叫mysqld,有的叫mariadb,名字对不上自然配不上。
老的SysV服务咋办
有些老程序或者自编译的软件不走systemd,还是老一套的init脚本,放在/etc/init.d/目录下。这种也可以用systemctl来管,或者用chkconfig这个老命令:chkconfig –add 服务名加上,chkconfig 服务名 on打开自启。不过说实话,现在新装系统基本都推荐用systemd管理,老项目迁移的时候顺手把服务转成systemd的unit文件,管理起来统一又省心。
自己写的脚本想开机跑?用这个招
还有人问,我自己写了个脚本,想开机自动执行咋办?两个选择:一个是给脚本写个systemd服务单元文件,放到/etc/systemd/system/下,然后enable,好处是能看状态、能管日志;另一个是简单粗暴用/etc/rc.local,把这个文件加上执行权限,把启动脚本的命令写进去,开机就会执行。个人脚本图省事用rc.local就行,但要确保rc.local有执行权限,很多人卡在这,脚本写得没毛病,就是没执行权限,开机静默跳过,你还找不到原因。
顺便说下依赖顺序那点事
如果网站的服务之间有依赖关系,比如Nginx要等MySQL和PHP-FPM起来才能正常干活,那自启的顺序也得讲究。systemd里可以配置After和Requires,声明谁先谁后,不然全都在开机时一起抢着起,数据库还没就绪,Nginx先起来了,结果还是报错。简单点的做法是把启动都交给systemd自己按依赖编排,复杂的就手动调一下启动顺序。大部分小站用不上这么细,但知道有这回事,遇到奇怪的启动失败时不至于抓瞎。
配好之后,一定要验证一次
配置完别光看enable成功就完事,得真验证:方便的时候用systemctl reboot重启一次服务器,或者至少用systemctl restart确认服务正常。我见过不少配置没问题、但服务本身启动就报错的情况,enable了也没用,重启完照样起不来。所以最稳的做法是:改完配置找机会真重启一遍,看服务是不是自己起来了,网站是不是直接能访问。真等出事了再重启验证,那叫救火;提前验证一遍,那叫预防。
再补一句:如果你用的是宝塔这类面板,面板里也有开机自启管理,勾选就行;但面板重启后自己起不起来的问题也常见,建议核心服务(数据库、Web服务器)的系统级自启也配好,双保险,别把所有鸡蛋放一个篮子里。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!