如何用systemctl管理systemd服务?

在Linux系统中,服务(Service)是运行在后台的应用程序,通常用于提供特定功能(如Web服务、数据库等),查询服务状态是系统管理的基础操作,无论是检查服务是否正常运行、排查故障,还是管理启动项,都需要掌握相关命令,以下是多种查询Linux服务的详细方法,适用于主流发行版(如Ubuntu、CentOS、Debian等)。
systemctl 是管理 systemd 系统的标准工具,支持大多数现代 Linux 发行版。
常用操作:

  1. 查看所有服务状态

    systemctl list-units --type=service  # 列出所有已加载的服务
    systemctl list-units --type=service --all  # 包含未激活的服务

    输出示例:

    UNIT          LOAD   ACTIVE SUB    DESCRIPTION  
    ssh.service   loaded active running OpenSSH server  
    nginx.service loaded active running Nginx web server
  2. 检查单个服务状态

    systemctl status nginx  # 替换 nginx 为目标服务名

    关键信息解读:

    • Active: active (running):服务正在运行。
    • Loaded: loaded (/usr/lib/systemd/system/nginx.service):服务配置文件路径。
    • 日志片段:显示最近的服务活动记录(如错误信息)。
  3. 过滤服务状态

    systemctl list-units --type=service --state=running  # 仅显示运行中的服务
    systemctl list-units --type=service --state=failed   # 仅显示启动失败的服务

使用 service 命令(兼容 SysVinit 系统)

适用于旧版系统(如 CentOS 6)或兼容性场景。
基本语法:

service <服务名> status  

示例:

service sshd status  # 检查 SSH 服务状态  

输出示例:

sshd (pid 1234) is running...  # 表示服务正在运行

通过进程检查服务

若服务未注册到 systemd/SysVinit,可直接检查进程:

  1. 使用 ps 命令

    ps aux | grep nginx  # 替换 nginx 为进程关键词

    输出示例:

    root      1234  0.0  0.1  12345  6789 ?        Ss   10:00   0:00 nginx: master process

    存在相关进程即表示服务在运行。

  2. 使用 pgrep 快速定位

    pgrep -l nginx  # 列出匹配进程的 PID 和名称

查看服务日志(故障排查关键)

日志是诊断服务问题的核心:

  1. 通过 journalctl(systemd 专用)

    journalctl -u nginx.service          # 查看 Nginx 服务的全部日志  
    journalctl -u nginx --since "2025-10-01" --until "2025-10-02"  # 按时间过滤  
    journalctl -u nginx -p err           # 仅显示错误日志
  2. 直接查看日志文件
    传统服务日志通常位于 /var/log/

    tail -f /var/log/nginx/error.log  # 实时监控 Nginx 错误日志

其他辅助方法

  1. 检查端口占用
    若服务通过端口通信(如 Web 服务默认 80 端口):

    ss -tulnp | grep :80  # 查看 80 端口的进程

    输出示例:

    tcp  LISTEN 0  128  *:80  *:*  users:(("nginx",pid=1234,fd=6))
  2. 验证配置文件
    服务启动失败可能是配置错误:

    nginx -t  # Nginx 配置语法检查(其他服务如 sshd -t)

常见问题与解决

  • 问题1:服务状态显示 failedinactive

    • 解决步骤:
      1. 查看日志:journalctl -u <服务名> -xe
      2. 检查依赖:systemctl list-dependencies <服务名>
      3. 重载配置:systemctl daemon-reload
  • 问题2:命令未找到(如 systemctl

    • 原因:系统使用旧版 init(如 SysVinit)。
    • 替代方案:
      • 使用 service 命令。
      • 直接检查进程或日志文件。
  • 问题3:服务已运行但无法访问

    • 检查防火墙:sudo ufw status(Ubuntu)或 firewall-cmd --list-ports(CentOS)。
    • 验证端口监听:ss -tulnp | grep <端口>

总结建议

场景 推荐命令
现代 Linux 发行版 systemctl status <服务名>
旧版系统(如 CentOS 6) service <服务名> status
服务无响应 检查进程 (ps aux \| grep <服务>) 和日志 (journalctl)
端口访问问题 结合 ssnetstat 验证端口

重要提示:

  • 操作需 root 权限(命令前加 sudo)。
  • 不同发行版路径可能差异(如日志位置),参考官方文档。
  • 定期备份配置文件和日志,避免误操作导致数据丢失。

通过以上方法,您可以高效查询和管理 Linux 服务,如需深入细节,请查阅发行版手册(如 Ubuntu Systemd 文档 或 Red Hat 服务管理指南)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9391.html

(0)
酷番叔酷番叔
上一篇 2025年7月31日 06:50
下一篇 2025年7月31日 07:02

相关推荐

  • Linux如何正确使用U盘?

    基础操作:插入与识别插入U盘Linux内核(2.6+版本)支持热插拔,插入U盘后:图形界面:桌面右上角通常弹出通知(GNOME/KDE等)终端验证:执行 lsblk 或 sudo fdisk -l示例输出:sdb 8:16 1 14.9G 0 disk└─sdb1 8:17 1 14.9G 0 part # 此……

    2025年7月8日
    18100
  • Linux下如何实现sh脚本的循环执行?

    在Linux系统中,循环执行sh脚本是常见的需求,例如定期备份、系统监控、数据批处理等场景,实现循环执行的方式有多种,包括脚本内循环结构、系统定时任务工具、第三方工具等,每种方法适用于不同的场景和需求,本文将详细介绍这些方法,并分析其优缺点及使用注意事项,脚本内循环结构实现循环执行在sh脚本内部使用bash内置……

    2025年8月25日
    17300
  • Linux复制粘贴,图形界面VS终端谁更快?

    图形界面(GUI)复制粘贴适用于桌面环境(如GNOME、KDE、XFCE等):通用快捷键复制:选中文本/文件后按 Ctrl + C粘贴:光标定位目标位置后按 Ctrl + V剪切:Ctrl + X(文件剪切后需在目标位置粘贴才能移动)鼠标操作右键菜单选择“复制/粘贴”部分应用(如文件管理器)支持拖放文件实现复制……

    2025年7月27日
    15600
  • 如何查linux多少位

    过命令 uname -a 查看 Linux 系统位数,输出信息

    2025年8月10日
    17100
  • 电脑无法启动?bootx64.efi丢失该选哪个?

    基本原理Linux通过以下机制识别U盘:设备文件:插入U盘后,系统自动创建设备文件(如/dev/sdb),分区标识:启动U盘通常包含特殊分区标志(如EFI系统分区)或特定文件(如/efi/boot/bootx64.efi),文件系统:启动盘常用FAT32(用于UEFI)或ISO9660(光盘镜像格式),命令行识……

    2025年6月21日
    19800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信