Linux系统服务管理与自启动配置教程(CentOS/RHEL 7+)
- 技术分享
- 2023-08-09
- 31热度
- 0评论
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日志排查、自定义服务配置,这些操作能解决日常服务管理的大部分需求;同时注意防火墙端口开放,避免服务无法外部访问。生产环境中,建议定期检查服务状态和日志,确保服务稳定运行,同时备份服务配置文件,便于故障恢复。
