systemctl 基础用法
systemctl 是 systemd 系统和服务管理器的控制命令,用于管理系统服务。它是现代 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+)中管理服务的主要工具。
📋 目录
什么是 systemd 和 systemctl
- systemd:Linux 系统的初始化系统和服务管理器,负责启动和管理系统服务
- systemctl:systemd 的命令行工具,用于控制 systemd 系统和服务管理器
为什么使用 systemctl?
- 替代了传统的
service和chkconfig命令 - 提供更强大的服务管理功能
- 支持并行启动服务,提高系统启动速度
- 更好的依赖管理
- 统一的日志管理
服务管理基础命令
启动服务
bash
# 启动服务
sudo systemctl start service_name
# 示例:启动 Nginx
sudo systemctl start nginx停止服务
bash
# 停止服务
sudo systemctl stop service_name
# 示例:停止 Nginx
sudo systemctl stop nginx重启服务
bash
# 重启服务
sudo systemctl restart service_name
# 示例:重启 Nginx
sudo systemctl restart nginx重载服务配置
bash
# 重新加载配置文件(不中断服务)
sudo systemctl reload service_name
# 示例:重载 Nginx 配置
sudo systemctl reload nginx启用/禁用服务
bash
# 设置服务开机自启
sudo systemctl enable service_name
# 取消服务开机自启
sudo systemctl disable service_name
# 示例:启用 Nginx 开机自启
sudo systemctl enable nginx启用并启动服务
bash
# 同时启用和启动服务
sudo systemctl enable --now service_name
# 示例:启用并启动 Nginx
sudo systemctl enable --now nginx服务状态查询
查看服务状态
bash
# 查看服务详细状态
sudo systemctl status service_name
# 示例:查看 Nginx 状态
sudo systemctl status nginx状态输出说明:
- active (running):服务正在运行
- active (exited):服务已成功执行一次
- inactive (dead):服务未运行
- failed:服务启动失败
查看所有服务
bash
# 查看所有已加载的服务
systemctl list-units --type=service
# 查看所有服务(包括未加载的)
systemctl list-units --type=service --all
# 查看所有失败的服务
systemctl list-units --type=service --state=failed查看服务是否启用
bash
# 查看服务是否开机自启
systemctl is-enabled service_name
# 示例
systemctl is-enabled nginx
# 输出:enabled 或 disabled查看服务是否运行
bash
# 查看服务是否正在运行
systemctl is-active service_name
# 示例
systemctl is-active nginx
# 输出:active 或 inactive服务日志查看
使用 journalctl 查看日志
bash
# 查看服务的所有日志
sudo journalctl -u service_name
# 查看最近 50 条日志
sudo journalctl -u service_name -n 50
# 实时跟踪日志(类似 tail -f)
sudo journalctl -u service_name -f
# 查看今天的日志
sudo journalctl -u service_name --since today
# 查看最近 1 小时的日志
sudo journalctl -u service_name --since "1 hour ago"
# 查看指定时间范围的日志
sudo journalctl -u service_name --since "2024-01-01 00:00:00" --until "2024-01-01 23:59:59"
# 按优先级过滤日志
sudo journalctl -u service_name -p err # 只显示错误及以上级别查看系统日志
bash
# 查看所有系统日志
sudo journalctl
# 查看内核日志
sudo journalctl -k
# 查看启动日志
sudo journalctl -b
# 查看上次启动的日志
sudo journalctl -b -1服务配置文件
服务文件位置
systemd 服务配置文件通常位于:
/etc/systemd/system/- 系统管理员创建的服务文件/usr/lib/systemd/system/- 软件包安装的服务文件/run/systemd/system/- 运行时创建的服务文件
查看服务配置
bash
# 查看服务配置文件内容
systemctl cat service_name
# 示例:查看 Nginx 服务配置
systemctl cat nginx服务文件示例
一个典型的服务配置文件(.service 文件)示例:
ini
[Unit]
Description=Nginx Web Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target重新加载 systemd 配置
修改服务配置文件后,需要重新加载 systemd:
bash
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 然后重启服务使配置生效
sudo systemctl restart service_name常用服务管理场景
场景 1:安装新服务后启用
bash
# 1. 安装服务(例如 Nginx)
sudo dnf install -y nginx
# 2. 启动服务
sudo systemctl start nginx
# 3. 设置开机自启
sudo systemctl enable nginx
# 4. 检查状态
sudo systemctl status nginx场景 2:修改配置后重载
bash
# 1. 修改配置文件
sudo vim /etc/nginx/nginx.conf
# 2. 测试配置文件
sudo nginx -t
# 3. 重载配置(不中断服务)
sudo systemctl reload nginx
# 或者重启服务
sudo systemctl restart nginx场景 3:排查服务问题
bash
# 1. 查看服务状态
sudo systemctl status service_name
# 2. 查看服务日志
sudo journalctl -u service_name -n 100
# 3. 查看错误日志
sudo journalctl -u service_name -p err
# 4. 实时跟踪日志
sudo journalctl -u service_name -f场景 4:禁用不需要的服务
bash
# 1. 停止服务
sudo systemctl stop service_name
# 2. 禁用开机自启
sudo systemctl disable service_name
# 3. 检查状态
sudo systemctl status service_name实战示例
示例 1:管理 Nginx 服务
bash
# 启动 Nginx
sudo systemctl start nginx
# 查看状态
sudo systemctl status nginx
# 启用开机自启
sudo systemctl enable nginx
# 重载配置
sudo systemctl reload nginx
# 查看日志
sudo journalctl -u nginx -f示例 2:管理 MySQL 服务
bash
# 启动 MySQL
sudo systemctl start mysqld
# 查看状态
sudo systemctl status mysqld
# 启用开机自启
sudo systemctl enable mysqld
# 查看错误日志
sudo journalctl -u mysqld -p err示例 3:管理 Docker 服务
bash
# 启动 Docker
sudo systemctl start docker
# 启用开机自启
sudo systemctl enable docker
# 查看状态
sudo systemctl status docker
# 重启 Docker
sudo systemctl restart docker示例 4:管理 SSH 服务
bash
# 查看 SSH 服务状态
sudo systemctl status sshd
# 重启 SSH 服务(修改配置后)
sudo systemctl restart sshd
# 查看 SSH 登录日志
sudo journalctl -u sshd | grep "Accepted"示例 5:创建自定义服务
创建一个简单的自定义服务示例:
bash
# 1. 创建服务文件
sudo vim /etc/systemd/system/myapp.service服务文件内容:
ini
[Unit]
Description=My Custom Application
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetbash
# 2. 重新加载 systemd
sudo systemctl daemon-reload
# 3. 启用并启动服务
sudo systemctl enable --now myapp
# 4. 查看状态
sudo systemctl status myapp常用命令速查表
| 命令 | 说明 |
|---|---|
systemctl start service | 启动服务 |
systemctl stop service | 停止服务 |
systemctl restart service | 重启服务 |
systemctl reload service | 重载配置 |
systemctl status service | 查看状态 |
systemctl enable service | 启用开机自启 |
systemctl disable service | 禁用开机自启 |
systemctl enable --now service | 启用并启动 |
systemctl is-active service | 检查是否运行 |
systemctl is-enabled service | 检查是否启用 |
systemctl list-units --type=service | 列出所有服务 |
systemctl daemon-reload | 重新加载配置 |
journalctl -u service | 查看服务日志 |
journalctl -u service -f | 实时查看日志 |
💡 最佳实践
- 修改配置后记得重载:修改服务配置文件后,使用
systemctl daemon-reload重新加载 - 使用 reload 而非 restart:如果服务支持,优先使用
reload而不是restart,避免中断服务 - 定期检查失败的服务:使用
systemctl list-units --state=failed检查失败的服务 - 查看日志排查问题:遇到问题时,使用
journalctl查看详细日志 - 测试配置:修改配置后,先测试配置是否正确,再重载或重启服务
📝 总结
systemctl 是现代 Linux 系统服务管理的核心工具。掌握这些基础用法,可以高效地管理系统服务。记住:
- 启动/停止/重启:
start、stop、restart - 启用/禁用:
enable、disable - 查看状态:
status、is-active、is-enabled - 查看日志:
journalctl -u service_name - 重载配置:
daemon-reload和reload
希望这篇文章能帮助你更好地使用 systemctl 管理系统服务!🚀