Linux 系统的服务和启动流程关系到系统的稳定性和启动速度,而 systemd
是当前主流 Linux 发行版(如 CentOS 7+/Ubuntu 16.04+)默认采用的初始化系统和服务管理器。
一、什么是 systemd?
-
systemd 是一种初始化系统(init system),用于在系统启动时初始化服务、挂载文件系统、设置网络等。
-
它取代了传统的
SysVinit
和Upstart
,具备并发启动、依赖关系管理、日志统一管理等优势。
二、常见 systemctl 命令
命令 | 说明 |
---|---|
systemctl start 服务名 | 启动服务 |
systemctl stop 服务名 | 停止服务 |
systemctl restart 服务名 | 重启服务 |
systemctl status 服务名 | 查看服务状态 |
systemctl enable 服务名 | 设置服务开机自启 |
systemctl disable 服务名 | 取消服务开机自启 |
systemctl is-enabled 服务名 | 判断是否开机自启 |
systemctl list-units --type=service | 查看所有已加载的服务单元 |
三、服务单元(Unit)的类型
类型 | 说明 |
---|---|
.service | 普通服务 |
.socket | 套接字服务 |
.mount | 文件系统挂载点 |
.target | 启动目标(类似运行级别) |
.timer | 定时服务 |
.device | 设备单元 |
四、开机启动管理
查看当前的默认启动目标(相当于旧系统的运行级别):
systemctl get-default
设置为多用户文本界面(无图形):
sudo systemctl set-default multi-user.target
设置为图形界面:
sudo systemctl set-default graphical.target
五、服务状态查看与日志分析
查看某个服务的详细运行日志(由 journald 管理):
journalctl -u 服务名
查看所有系统日志:
journalctl
按时间过滤日志:
journalctl --since "2024-05-01 10:00" --until "2024-05-01 12:00"
实时查看日志:
journalctl -f
六、自定义 systemd 服务
可创建自定义服务单元文件放在 /etc/systemd/system/myapp.service
,例如:
[Unit]
Description=My App Service
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reexec # 重启 systemd 管理器(建议)
sudo systemctl daemon-reload # 重新加载配置
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
七、关机与重启命令
reboot # 重启
poweroff # 关机
halt # 停止所有进程
systemctl reboot # 推荐重启方式
systemctl poweroff # 推荐关机方式
八、小结
systemd
提供统一的服务、启动、日志管理机制,掌握它能让你更高效地维护系统服务,开发和部署后台服务程序。