Linux系统服务管理与自启动配置教程(CentOS/RHEL 7+)

Linux系统服务(如httpd、sshd、mysql)是系统运行的核心,运维工作中,经常需要启动、停止、重启服务,以及配置服务自启动(避免系统重启后服务失效)。本文以CentOS/RHEL 7+系统为例(采用systemd服务管理机制,替代传统的sysvinit),详解服务管理的核心操作、自启动配置、服务状态排查,适合运维人员日常操作。

一、核心概念:systemd 服务管理机制

CentOS 7+ 放弃了传统的sysvinit(service、chkconfig命令),采用systemd作为系统初始化和服务管理工具,核心优势:启动速度快、支持并行启动、配置简单、状态监控更全面。
关键说明:
  • systemd的核心命令是systemctl,用于管理所有系统服务。
  • 服务配置文件路径:/usr/lib/systemd/system/(系统默认服务)、/etc/systemd/system/(自定义服务,优先级更高)。
  • 服务后缀:.service(所有服务配置文件均以.service结尾,如httpd.service、sshd.service)。

二、基础操作:服务的启动、停止、重启与状态查看

以httpd(Apache服务)为例,详解systemctl的核心操作,所有服务通用(替换httpd为目标服务即可)。

1. 查看服务状态(最常用)

systemctl status httpd
输出关键信息解析:
  • active (running):服务正在运行(正常状态)。
  • inactive (dead):服务已停止。
  • failed:服务启动失败(需查看日志排查问题)。
  • Loaded:服务是否开机自启(enabled表示自启,disabled表示不自启)。
补充:查看所有服务状态:systemctl list-units --type=service;查看已启动的服务:systemctl list-units --type=service --state=running

2. 启动、停止、重启服务

  • 启动服务:systemctl start httpd(立即启动服务,临时生效,重启系统后失效)。
  • 停止服务:systemctl stop httpd(立即停止服务,临时生效)。
  • 重启服务:systemctl restart httpd(停止后重新启动,适合修改服务配置后生效)。
  • 重载服务:systemctl reload httpd(不停止服务,重载配置文件,适合无需停机的配置修改,如httpd的配置修改)。

3. 禁止/允许服务开机自启(核心配置)

自启动配置决定了系统重启后,服务是否自动启动,常用命令:
  • 设置服务开机自启:systemctl enable httpd(永久生效,重启系统后服务自动启动)。
  • 禁止服务开机自启:systemctl disable httpd(永久生效,重启系统后服务不自动启动)。
  • 查看服务自启状态:systemctl is-enabled httpd(输出enabled/disabled)。
补充:一次性设置“启动服务+开机自启”:systemctl enable --now httpd;一次性设置“停止服务+禁止自启”:systemctl disable --now httpd

三、进阶操作:服务日志查看与故障排查

服务启动失败或运行异常时,查看日志是排查问题的核心,systemd自带日志管理工具journalctl,无需额外安装,直接使用。

1. 查看指定服务的日志

  • 查看httpd服务的所有日志:journalctl -u httpd(-u指定服务名)。
  • 查看httpd服务的实时日志(类似tail -f):journalctl -u httpd -f(适合实时监控服务运行状态,排查实时报错)。
  • 查看最近10条日志:journalctl -u httpd -n 10
  • 查看指定时间范围内的日志:journalctl -u httpd --since "2024-05-20 10:00" --until "2024-05-20 11:00"

2. 常见服务故障排查案例

案例1:httpd服务启动失败,执行systemctl status httpd提示“failed”,查看日志:journalctl -u httpd -f,若提示“Address already in use”,说明80端口被占用,解决:关闭占用80端口的服务(fuser -k 80/tcp),再重启httpd。
案例2:sshd服务无法连接,查看服务状态:systemctl status sshd,若服务未启动,执行systemctl start sshd并设置自启;若服务已启动,查看防火墙是否开放22端口(后续会讲解)。

四、进阶操作:自定义系统服务(实战必备)

日常运维中,经常需要将自定义脚本(如批量备份脚本、自定义服务程序)配置为系统服务,实现开机自启和统一管理,以下是详细步骤(以自定义备份脚本为例)。

1. 准备自定义脚本

创建备份脚本/home/backup/backup.sh,内容如下(实现每天凌晨2点备份/home/data目录到/backup目录):
#!/bin/bash
# 自定义备份脚本
BACKUP_DIR="/backup"
SOURCE_DIR="/home/data"
DATE=$(date +%Y%m%d)

# 创建备份目录(若不存在)
if [ ! -d $BACKUP_DIR ]; then
    mkdir -p $BACKUP_DIR
fi

# 压缩备份
tar -zcvf $BACKUP_DIR/data_backup_$DATE.tar.gz $SOURCE_DIR

# 删除7天前的备份文件(避免占用过多空间)
find $BACKUP_DIR -name "data_backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
给脚本添加执行权限:chmod 755 /home/backup/backup.sh,测试脚本是否能正常运行:/home/backup/backup.sh

2. 创建服务配置文件

/etc/systemd/system/目录下,创建服务配置文件backup.service,内容如下:
[Unit]
# 服务描述
Description=Custom Backup Service
# 服务启动依赖(可选,如依赖网络)
After=network.target

[Service]
# 服务类型(simple:立即启动,forking:后台运行)
Type=simple
# 执行的脚本路径
ExecStart=/home/backup/backup.sh
# 服务停止时执行的命令(可选)
ExecStop=/bin/echo "Backup service stopped"
# 服务重启策略(可选,on-failure:失败时重启)
Restart=on-failure

[Install]
# 服务安装目录(指定自启时的关联目标)
WantedBy=multi-user.target
配置文件说明:[Unit]段用于描述服务信息和依赖;[Service]段用于配置服务执行的命令和运行参数;[Install]段用于配置自启相关。

3. 加载服务并设置自启

  • 重新加载systemd配置(新增服务后必须执行):systemctl daemon-reload
  • 启动自定义服务:systemctl start backup
  • 查看服务状态:systemctl status backup,确认服务正常运行。
  • 设置服务开机自启:systemctl enable backup
补充:若修改了服务配置文件,需执行systemctl daemon-reload,再重启服务生效。

五、补充:防火墙与服务端口配置(避免服务无法访问)

服务启动后,若外部无法访问(如httpd的80端口、mysql的3306端口),大概率是防火墙未开放对应端口,CentOS 7+ 防火墙核心命令如下:
  • 查看防火墙状态:systemctl status firewalld(active表示开启,inactive表示关闭)。
  • 开放指定端口(永久生效):firewall-cmd --permanent --add-port=80/tcp(开放80端口,tcp协议)。
  • 开放多个端口:firewall-cmd --permanent --add-ports=80/tcp,3306/tcp
  • 重载防火墙配置(开放端口后必须执行):firewall-cmd --reload
  • 查看已开放的端口:firewall-cmd --permanent --list-ports
  • 关闭防火墙(临时,不推荐生产环境):systemctl stop firewalld;禁止防火墙自启:systemctl disable firewalld

六、实战总结

systemd服务管理是CentOS 7+ 运维的核心,重点掌握:systemctl的基础操作(启动、停止、自启)、journalctl日志排查、自定义服务配置,这些操作能解决日常服务管理的大部分需求;同时注意防火墙端口开放,避免服务无法外部访问。生产环境中,建议定期检查服务状态和日志,确保服务稳定运行,同时备份服务配置文件,便于故障恢复。