温馨提示×

centos服务启动项如何管理

小樊
40
2025-11-14 01:06:43
栏目: 智能运维

CentOS 服务启动项管理指南

一、Systemd 管理服务 CentOS 7 及以上

  • 常用操作
    • 启动/停止/重启/热重载:systemctl start|stop|restart|reload <服务名>
    • 查看状态:systemctl status <服务名>
    • 开机自启/取消自启:systemctl enable|disable <服务名>
    • 彻底屏蔽/解除屏蔽(比 disable 更强):systemctl mask|unmask <服务名>
    • 查看与筛选
      • 列出所有服务单元及启用状态:systemctl list-unit-files --type=service
      • 只看已启用:systemctl list-unit-files --type=service | grep enabled
      • 只看运行中:systemctl list-units --type=service --state=running
  • 典型示例
    • nginx 开机自启并立即启动:
      sudo systemctl enable --now nginx
    • 临时关闭并禁止开机自启:
      sudo systemctl disable --now firewalld
  • 提示
    • enable 仅配置开机自启,不会立即启动;需要启动请配合 start 或使用 –now
    • 排查问题优先用 status 查看是否 active、是否 enabled、以及最近的日志片段。

二、SysV 与 CentOS 6 的兼容方式

  • 服务控制:service <服务名> start|stop|restart|status
  • 开机自启:chkconfig <服务名> on|off
  • 查询与列表:chkconfig --list [<服务名>]
  • 添加/删除 SysV 脚本到管理:chkconfig --add <服务名>chkconfig --del <服务名>
  • 适用说明:以上适用于 CentOS 6 及仍保留 /etc/init.d/ SysV 脚本的环境;新系统建议使用 systemctl

三、自定义服务与开机执行

  • 自定义 Systemd 服务
    • 单元文件路径:系统默认 /usr/lib/systemd/system/,自定义或覆盖建议放在 /etc/systemd/system/(优先级更高)。
    • 最小可用模板(保存为 /etc/systemd/system/myapp.service):
      [Unit]
      Description=My Application
      After=network.target
      
      [Service]
      Type=simple
      ExecStart=/usr/bin/python3 /opt/myapp/app.py
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      
    • 使配置生效并启用:
      sudo systemctl daemon-reload
      sudo systemctl enable --now myapp.service
  • 使用 rc.local 执行简单命令(不推荐用于关键服务)
    • 编辑:sudo vi /etc/rc.d/rc.local
    • 在文件末尾添加命令,例如:/opt/scripts/start.sh &
    • 赋权:sudo chmod +x /etc/rc.d/rc.local
    • 注意:并行启动可能导致执行顺序不可控,生产环境优先使用 systemd 单元。

四、常用排查与维护命令

  • 查看失败单元并重置失败状态:systemctl --failed,必要时 systemctl reset-failed <服务名>
  • 重新加载单元文件(新增/修改/删除 .service 后):systemctl daemon-reload
  • 分析启动性能:systemd-analyze;查看各服务耗时:systemd-analyze blame | grep .service
  • 查看默认启动目标:systemctl get-default
  • 服务单元文件位置与生效顺序:默认 /usr/lib/systemd/system/,自定义 /etc/systemd/system/(覆盖同名单元)

0