马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
服务器重启之后,数据库、应用服务、自定义脚本要能自动拉起来,就得配开机自启。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企服评测-应用市场 编辑提示 |