Ubuntu开机自启服务配置,Nginx
服务器重启后网站打不开,多半是Nginx或MySQL没有跟着系统一起启动。
Ubuntu从16.04开始默认使用systemd管理服务,配置开机自启的核心就是让这两个服务处于enabled状态。
下面按顺序操作,零基础也能完成。
先确认服务当前状态
登录Ubuntu服务器,打开终端,执行下面两条命令,分别查看Nginx和MySQL是否在运行、是否已设置开机自启。
systemctl status nginx
systemctl status mysql
输出中关注两个关键信息:Active行显示active (running)表示服务正在运行;Loaded行如果包含enabled,说明已经设置了开机自启。
如果显示disabled,就需要手动启用。
如果服务根本没安装,先安装再继续:
sudo apt update
sudo apt install nginx mysql-server -y
用systemctl设置开机自启
确认服务存在后,执行以下命令将它们加入开机自启列表:
sudo systemctl enable nginx
sudo systemctl enable mysql
执行成功会返回类似Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service的提示,
表示自启链接已创建。
如果服务当前没运行,可以同时启动并设置自启:
sudo systemctl enable --now nginx
sudo systemctl enable --now mysql
--now参数的作用是“立即启动并设为开机自启”,省去再敲一次start命令。
验证配置是否真正生效
设置完成后,用is-enabled命令做快速检查:
systemctl is-enabled nginx
systemctl is-enabled mysql
正常返回enabled。
如果返回disabled或报错,说明设置没成功,需要检查上一步的输出。
更稳妥的验证方式是重启服务器:
sudo reboot
重启后重新登录,再次执行systemctl status nginx和systemctl status mysql,确认两个服务都自动变成了active (running)。
同时用浏览器访问服务器IP,看Nginx默认页面能否打开;
用mysql -u root -p尝试登录数据库。
常见报错与避坑说明
报错“Unit nginx.service not found”:说明Nginx没有安装,或者安装方式不是通过apt。
先执行which nginx确认是否存在,不存在就重新安装。
MySQL服务名不叫mysql:部分Ubuntu版本或手动安装的MySQL可能使用mysqld作为服务名。
用systemctl list-units --type=service | grep -i mysql查找实际名称,再替换命令中的服务名。
启用了但重启后仍未运行:检查是否有其他服务冲突,比如Apache占用了80端口导致Nginx启动失败。
用sudo ss -tlnp | grep :80查看端口占用情况。
不要用rc.local或crontab做自启:这两种方式在systemd环境下容易失效或延迟执行,优先使用systemctl enable。
修改配置后要重载:
如果调整了Nginx配置文件,
先执行sudo nginx -t测试语法,
再sudo systemctl reload nginx,
不要直接restart以免中断连接。
几个容易混淆的问题
enable和start有什么区别? start是立即启动服务,只对当前运行有效;
enable是设置开机自启,不影响当前状态。
两者可以分开执行,也可以用enable --now合并。
如何取消开机自启? 执行sudo systemctl disable nginx即可移除自启链接,服务本身不会被卸载。
Ubuntu 22.04和24.04操作一样吗? systemd的管理方式在这些版本中基本一致,命令通用。
如果遇到差异,以systemctl --version显示的版本和官方文档为准。
MySQL自启后连不上怎么办? 先确认服务状态是running,
再检查/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address是否限制了访问IP,
以及防火墙是否放行了3306端口。
按上面步骤操作后,服务器重启时Nginx和MySQL会自动拉起,网站和数据库服务不再需要手动干预。
如果仍有异常,优先回看报错信息中的服务名和端口占用这两个方向。