在 Linux 系统中设置 Service 服务开机自启的详细指南

[复制链接]
发表于 2026-10-3 21:59:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

服务器重启之后,数据库、应用服务、自定义脚本要能自动拉起来,就得配开机自启。Linux 上主流只有两套 init:systemd 和 sysvinit。本文从检查服务状态讲起,覆盖 systemd 的 enable、is-enabled、disable,老系统的 chkconfig 与 update-rc.d,再到自定义 .service 单元文件的写法和常见故障排查。

一、两套 init 系统

  • systemd:CentOS 7+、Ubuntu 16.04+、Debian 8+ 等现代发行版默认使用。
  • sysvinit:CentOS 6、Ubuntu 14.04 这类较老系统使用。

现在的服务器基本都是 systemd,所以以它为主讲,老系统放到后面单独一节。

二、systemd 中设置开机自启

systemd 是什么

systemd 是系统与服务管理器,负责引导流程、管理运行时服务,同时提供日志日志、时间同步等功能。它通过 .service 单元文件定义服务,自带依赖解析和并行启动能力。

先看服务状态

确认服务已被 systemd 管理、并且能手动启动,再看状态:

sudo systemctl status nginx

输出会显示服务是否在运行,以及最近的日志日志片段。被 systemd 接管的服务,这里给出的信息会比较完整。

enable 开机自启

sudo systemctl enable nginx

这条会在 /etc/systemd/system/multi-user.target.wants/ 下给服务建一个符号链接,下次开机就会被拉起来。

手动启停

  • 启动:sudo systemctl start 服务名
  • 停止:sudo systemctl stop 服务名

这两条是即时的,用来验证服务本身能不能跑通。

确认是否启用

sudo systemctl is-enabled nginx

输出 enabled 表示已启用,disabled 表示没启用或配置有问题。

取消开机自启

sudo systemctl disable nginx

禁掉之后开机不会再自动拉起,但手动 start 仍然可用。

三、sysvinit 中的做法

CentOS 6、Debian 7 这类系统用 sysvinit,开机自启靠 chkconfig 和启动脚本目录。

chkconfig 开关

sudo chkconfig httpd on

关闭就是把 on 换成 off。chkconfig 管理的是 SysV 运行级别下的软链接。

手动管理启动脚本

启动脚本都放在 /etc/init.d/,先列全:

ls /etc/init.d/

要用 update-rc.d 把它加进开机项:

sudo update-rc.d 服务名 defaults

这会在合适的运行级别里补上链接,开机即执行。

四、创建自定义 systemd 服务

建单元文件

sudo nano /etc/systemd/system/myservice.service

单元文件怎么填

[Unit]
Description=MyCustomService
After=network.target

[Service]
ExecStart=/path/to/your/program --argument
Restart=always
User=youruser
Group=yourgroup

[Install]
WantedBy=multi-user.target

三个段落各有分工:

  • 定义为 [Unit] 描述与依赖。After=network.target 表示等网络就绪后再启动,是自定义服务最常用的依赖。
  • 定义为 [Service] 启动命令与运行行为。ExecStart 是主进程命令,Restart=always 让进程崩了自动拉回,User/Group 指定运行身份。
  • 定义为 [Install] 启动目标。WantedBy=multi-user.target 表示多用户模式下随系统启动。

重新加载配置

sudo systemctl daemon-reload

告诉 systemd 读新的单元文件、刷新服务列表。这一步漏了,后面 enable 会直接找不到服务。

启用并启动

sudo systemctl enable myservice
sudo systemctl start myservice

看状态

sudo systemctl status myservice

五、常见故障排查

服务起不来

先看状态拿失败原因,再拉详细日志日志:

sudo journalctl -xe

忘了开自启

is-enabled 显示 disabled 时,直接 systemctl enable 服务名 补上即可。

单元文件写错

  • 路径与命令是否正确:ExecStart 里的可执行文件要写绝对路径,并且带执行权限。
  • 权限问题:User 指定的用户要对该命令和目标文件有操作权限。
  • 日志检查:用 journalctl -u 服务名 只看本服务的输出,定位更准。

六、小结

配开机自启这件事,现代 Linux 就是四个动作:status 看服务、enable 注册启动项、daemon-reload 刷新、is-enabled 验证结果。自定义服务多写一段 .service 文件加一次 daemon-reload。老系统的 chkconfig 与 update-rc.d 思路一致——往对应运行级别的目录里塞软链接。真出问题别盯着配置反复猜,直接上 journalctl 看日志最省时间。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表