1. Linux网络配置与管理实战
作为Linux系统管理员,网络配置是最基础的技能之一。我经常需要在不同环境中快速配置网络,这里分享几个实用技巧。
1.1 基础网络接口配置
在大多数现代Linux发行版中,网络配置文件位于/etc/netplan/目录下(Ubuntu系)或/etc/sysconfig/network-scripts/目录下(RHEL系)。以Ubuntu为例,一个典型的配置如下:
yaml复制network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
应用配置后,使用sudo netplan apply使更改生效。我习惯在修改前备份原配置文件,避免配置错误导致网络中断。
注意:修改网络配置前,建议通过
ip a命令确认当前网络接口名称,不同系统可能使用eth0、ens33等不同命名方式。
1.2 防火墙规则设置
Linux防火墙通常使用iptables或nftables。CentOS/RHEL 7+和Ubuntu 16.04+默认使用firewalld作为前端管理工具。几个常用命令:
bash复制# 查看当前规则
sudo firewall-cmd --list-all
# 开放HTTP端口
sudo firewall-cmd --permanent --add-service=http
# 开放自定义端口
sudo firewall-cmd --permanent --add-port=8080/tcp
# 重载防火墙
sudo firewall-cmd --reload
在实际工作中,我遇到一个常见问题:Docker服务启动后,防火墙规则会被修改。解决方法是在/etc/docker/daemon.json中添加:
json复制{
"iptables": false
}
然后重启Docker服务。这样Docker就不会自动修改iptables规则了。
1.3 网络诊断工具
当网络出现问题时,我通常会按以下顺序排查:
- 检查物理连接:
ip link show - 检查IP配置:
ip addr show - 测试连通性:
ping 8.8.8.8 - 检查路由:
ip route show - 测试DNS解析:
dig google.com - 检查端口监听:
ss -tulnp - 追踪路由:
traceroute google.com
对于复杂的网络问题,tcpdump是最强大的工具之一。例如,抓取eth0接口的HTTP流量:
bash复制sudo tcpdump -i eth0 -A port 80
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux防火墙深度配置
2.1 firewalld高级配置
firewalld使用zone和service的概念来管理防火墙规则。我通常按以下步骤配置:
-
创建自定义zone:
bash复制sudo firewall-cmd --permanent --new-zone=myzone -
设置zone的默认规则:
bash复制sudo firewall-cmd --permanent --zone=myzone --set-target=DROP -
添加允许的IP范围:
bash复制sudo firewall-cmd --permanent --zone=myzone --add-source=192.168.1.0/24 -
添加允许的服务:
bash复制sudo firewall-cmd --permanent --zone=myzone --add-service=ssh -
重载防火墙:
bash复制sudo firewall-cmd --reload
2.2 解决Docker与防火墙冲突
Docker默认会修改iptables规则,这经常导致firewalld规则失效。我的解决方案是:
-
停止Docker服务:
bash复制sudo systemctl stop docker -
清空iptables规则:
bash复制sudo iptables -F sudo iptables -X -
配置Docker不修改iptables:
编辑/etc/docker/daemon.json:json复制{ "iptables": false, "ip-masq": false } -
重启服务:
bash复制sudo systemctl restart docker firewalld
2.3 端口转发配置
在Linux上配置端口转发非常有用。例如,将80端口转发到内部服务器的8080端口:
bash复制sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
sudo firewall-cmd --reload
对于更复杂的转发需求,可以直接使用iptables:
bash复制sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
3. Linux定时任务管理
3.1 crontab基础使用
cron是Linux下最常用的定时任务工具。编辑当前用户的crontab:
bash复制crontab -e
一个典型的crontab条目如下:
code复制# 每天凌晨3点执行备份脚本
0 3 * * * /home/user/backup.sh
# 每5分钟检查一次服务状态
*/5 * * * * /home/user/check_service.sh
crontab时间格式说明:
code复制* * * * * 要执行的命令
- - - - -
| | | | |
| | | | ----- 星期几 (0 - 7) (星期天=0或7)
| | | ------- 月份 (1 - 12)
| | --------- 日 (1 - 31)
| ----------- 小时 (0 - 23)
------------- 分钟 (0 - 59)
3.2 系统级定时任务
对于系统级任务,可以直接在/etc/cron.*目录下添加脚本:
- /etc/cron.hourly/ - 每小时执行
- /etc/cron.daily/ - 每天执行
- /etc/cron.weekly/ - 每周执行
- /etc/cron.monthly/ - 每月执行
我通常会在脚本开头添加日志记录功能,方便排查问题:
bash复制#!/bin/bash
echo "$(date): 开始执行备份" >> /var/log/mybackup.log
# 备份命令...
echo "$(date): 备份完成" >> /var/log/mybackup.log
3.3 定时任务常见问题
-
环境变量问题:cron执行环境与用户shell环境不同,建议在脚本中设置必要的环境变量。
-
权限问题:确保脚本有执行权限,且输出重定向到有写入权限的位置。
-
邮件通知:cron默认会发送任务输出到用户邮箱,可以在crontab中设置MAILTO变量:
code复制MAILTO="admin@example.com" 0 3 * * * /home/user/backup.sh -
锁定机制:对于可能长时间运行的任务,建议使用flock防止重复执行:
bash复制
*/5 * * * * /usr/bin/flock -n /tmp/myjob.lock /home/user/check_service.sh
4. Linux权限管理详解
4.1 基础权限模型
Linux使用经典的rwx权限系统:
- r (read) - 读取权限
- w (write) - 写入权限
- x (execute) - 执行权限
权限分为三组:用户(user)、组(group)、其他(other)。使用ls -l查看:
code复制-rwxr-xr-- 1 user group 1234 Jan 1 10:00 file.txt
这表示:
- 用户(user)有rwx权限
- 组(group)有r-x权限
- 其他(other)有r--权限
4.2 特殊权限位
除了基本的rwx外,Linux还有三个特殊权限位:
-
SUID (Set User ID):执行时以文件所有者身份运行
bash复制chmod u+s file -
SGID (Set Group ID):对于目录,新文件继承目录的组
bash复制chmod g+s directory -
Sticky Bit:只有文件所有者才能删除/重命名
bash复制chmod +t directory
4.3 ACL高级权限控制
对于更复杂的权限需求,可以使用ACL(访问控制列表):
-
查看ACL:
bash复制
getfacl file -
设置用户权限:
bash复制
setfacl -m u:username:rwx file -
设置组权限:
bash复制
setfacl -m g:groupname:rx file -
删除特定ACL条目:
bash复制
setfacl -x u:username file -
递归设置目录ACL:
bash复制
setfacl -R -m u:username:rwx directory
4.4 权限管理最佳实践
-
遵循最小权限原则:只授予必要的权限
-
对于共享目录,使用SGID确保文件继承正确的组:
bash复制chmod g+s /shared chgrp sharedgroup /shared -
对于上传目录,设置Sticky Bit防止用户删除他人文件:
bash复制chmod +t /uploads -
定期审计权限:
bash复制find / -perm -4000 -ls # 查找SUID文件 find / -perm -2000 -ls # 查找SGID文件 find / -perm -1000 -ls # 查找Sticky Bit文件
5. Linux后台服务管理
5.1 systemd基础
现代Linux发行版大多使用systemd管理服务。常用命令:
bash复制# 启动服务
sudo systemctl start servicename
# 停止服务
sudo systemctl stop servicename
# 重启服务
sudo systemctl restart servicename
# 查看服务状态
sudo systemctl status servicename
# 启用开机启动
sudo systemctl enable servicename
# 禁用开机启动
sudo systemctl disable servicename
5.2 创建自定义服务
创建自定义服务非常简单。例如,创建一个Python脚本服务:
-
创建服务文件/etc/systemd/system/myapp.service:
code复制[Unit] Description=My Python Application After=network.target [Service] User=myuser Group=mygroup WorkingDirectory=/path/to/app ExecStart=/usr/bin/python3 /path/to/app/main.py Restart=always Environment="PATH=/usr/bin" Environment="PYTHONUNBUFFERED=1" [Install] WantedBy=multi-user.target -
重载systemd配置:
bash复制sudo systemctl daemon-reload -
启动服务:
bash复制sudo systemctl start myapp
5.3 日志管理
systemd使用journald管理日志。常用命令:
bash复制# 查看服务日志
sudo journalctl -u servicename
# 实时跟踪日志
sudo journalctl -u servicename -f
# 按时间筛选
sudo journalctl -u servicename --since "2023-01-01" --until "2023-01-02"
# 按优先级筛选
sudo journalctl -u servicename -p err
对于需要长期保存的日志,我通常会配置logrotate:
-
创建/etc/logrotate.d/myapp配置文件:
code复制/var/log/myapp/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 myuser mygroup sharedscripts postrotate systemctl restart myapp endscript } -
测试配置:
bash复制
logrotate -d /etc/logrotate.d/myapp
6. 综合应用案例
6.1 自动化备份方案
结合定时任务和权限管理,创建一个安全的备份方案:
-
创建备份脚本/usr/local/bin/backup.sh:
bash复制#!/bin/bash BACKUP_DIR="/backups" DATE=$(date +%Y%m%d) TAR_FILE="$BACKUP_DIR/backup_$DATE.tar.gz" # 创建备份目录 mkdir -p $BACKUP_DIR # 设置目录权限 chmod 750 $BACKUP_DIR chown root:backup $BACKUP_DIR # 执行备份 tar -czf $TAR_FILE /etc /home # 设置备份文件权限 chmod 640 $TAR_FILE chown root:backup $TAR_FILE # 删除7天前的备份 find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -delete -
创建备份组和用户:
bash复制sudo groupadd backup sudo useradd -g backup backupuser -
设置crontab:
bash复制sudo crontab -e添加:
code复制0 2 * * * /usr/local/bin/backup.sh -
配置sudo权限:
在/etc/sudoers.d/backup添加:code复制backupuser ALL=(root) NOPASSWD: /usr/local/bin/backup.sh
6.2 安全Web服务部署
部署一个安全的Web服务,结合防火墙和权限控制:
-
创建专用用户和组:
bash复制sudo groupadd webadmins sudo useradd -g webadmins webuser -
设置Web目录权限:
bash复制sudo mkdir -p /var/www/myapp sudo chown webuser:webadmins /var/www/myapp sudo chmod 2750 /var/www/myapp # SGID位确保文件继承组 -
配置防火墙:
bash复制sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' sudo firewall-cmd --reload -
创建systemd服务:
/etc/systemd/system/myapp.service:code复制[Unit] Description=My Web Application After=network.target [Service] User=webuser Group=webadmins WorkingDirectory=/var/www/myapp ExecStart=/usr/bin/python3 -m http.server 8000 Restart=always Environment="PYTHONUNBUFFERED=1" [Install] WantedBy=multi-user.target -
启动服务:
bash复制sudo systemctl daemon-reload sudo systemctl start myapp sudo systemctl enable myapp
7. 实用技巧与问题排查
7.1 网络问题排查流程
当遇到网络连接问题时,我通常按以下步骤排查:
-
检查物理连接:
bash复制ip link show -
检查IP配置:
bash复制
ip addr show -
测试基本连通性:
bash复制
ping 8.8.8.8 -
检查路由表:
bash复制
ip route show -
测试DNS解析:
bash复制
dig google.com nslookup google.com -
检查端口监听:
bash复制
ss -tulnp -
检查防火墙规则:
bash复制sudo iptables -L -n -v sudo firewall-cmd --list-all -
检查服务状态:
bash复制sudo systemctl status network sudo systemctl status firewalld
7.2 权限问题快速诊断
遇到"Permission denied"错误时,快速诊断步骤:
-
检查文件权限:
bash复制ls -l /path/to/file -
检查文件所有者:
bash复制ls -ld /path/to/directory -
检查用户组成员:
bash复制groups username -
检查ACL:
bash复制
getfacl /path/to/file -
检查SELinux上下文:
bash复制ls -Z /path/to/file -
检查SELinux布尔值:
bash复制
getsebool -a | grep httpd
7.3 定时任务调试技巧
调试cron任务时,我通常会:
-
捕获所有输出:
code复制* * * * * /path/to/script.sh > /tmp/cron.log 2>&1 -
设置完整的环境变量:
code复制* * * * * . /home/user/.profile; /path/to/script.sh -
使用绝对路径:
code复制* * * * * /usr/bin/python3 /home/user/script.py -
检查系统日志:
bash复制
grep CRON /var/log/syslog -
手动测试命令:
bash复制sudo -u username /path/to/script.sh
7.4 后台服务管理技巧
-
查看服务依赖关系:
bash复制
systemctl list-dependencies servicename -
查看启动耗时:
bash复制
systemd-analyze blame -
修改服务超时时间:
在服务文件中添加:code复制[Service] TimeoutStartSec=300 -
并行启动服务:
在服务文件中添加:code复制[Unit] After=network.target Requires=network.target -
限制服务资源:
在服务文件中添加:code复制[Service] MemoryLimit=512M CPUQuota=50%
8. 安全加固建议
8.1 SSH安全配置
-
禁用root登录:
bash复制sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config -
使用密钥认证:
bash复制sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config -
更改默认端口:
bash复制sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config -
限制用户访问:
bash复制echo "AllowUsers username" | sudo tee -a /etc/ssh/sshd_config -
启用fail2ban:
bash复制sudo apt install fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
8.2 文件系统安全
-
挂载选项:
在/etc/fstab中添加:code复制
/tmp /tmp tmpfs defaults,nosuid,nodev,noexec 0 0 -
限制SUID/SGID文件:
bash复制find / -xdev -type f -perm /6000 -exec chmod a-s {} \; -
设置umask:
bash复制echo "umask 027" | sudo tee -a /etc/profile -
定期检查setuid文件:
bash复制find / -perm -4000 -o -perm -2000 -ls
8.3 防火墙高级规则
-
防止SSH暴力破解:
bash复制sudo firewall-cmd --permanent --add-rich-rule='rule service name=ssh audit limit value="5/m" accept' -
防止DDOS攻击:
bash复制sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="tcp" source limit value="25/m" accept' -
限制ICMP:
bash复制sudo firewall-cmd --permanent --add-icmp-block=echo-request sudo firewall-cmd --permanent --add-icmp-block=echo-reply -
记录被拒绝的连接:
bash复制sudo firewall-cmd --permanent --set-log-denied=all
8.4 审计与监控
-
安装auditd:
bash复制sudo apt install auditd -
监控重要文件:
bash复制sudo auditctl -w /etc/passwd -p wa -k passwd_changes sudo auditctl -w /etc/shadow -p wa -k shadow_changes -
查看审计日志:
bash复制sudo ausearch -k passwd_changes -
设置日志轮转:
编辑/etc/audit/auditd.conf:code复制max_log_file = 50 num_logs = 5 -
监控用户命令:
bash复制sudo auditctl -a exit,always -F arch=b64 -S execve
9. 性能优化技巧
9.1 网络性能优化
-
调整TCP参数:
bash复制echo "net.core.rmem_max = 16777216" | sudo tee -a /etc/sysctl.conf echo "net.core.wmem_max = 16777216" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.tcp_rmem = 4096 87380 16777216" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.tcp_wmem = 4096 65536 16777216" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
启用TCP快速打开:
bash复制echo "net.ipv4.tcp_fastopen = 3" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
优化并发连接:
bash复制echo "net.ipv4.tcp_max_syn_backlog = 8192" | sudo tee -a /etc/sysctl.conf echo "net.core.somaxconn = 8192" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
9.2 磁盘I/O优化
-
调整I/O调度器:
bash复制echo "deadline" | sudo tee /sys/block/sda/queue/scheduler -
增加文件句柄限制:
bash复制echo "fs.file-max = 65535" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
优化ext4文件系统:
在/etc/fstab中添加:code复制defaults,noatime,nodiratime,data=writeback,barrier=0,nobh,errors=remount-ro
9.3 内存优化
-
调整swappiness:
bash复制echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
调整脏页比例:
bash复制echo "vm.dirty_ratio = 10" | sudo tee -a /etc/sysctl.conf echo "vm.dirty_background_ratio = 5" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
启用透明大页:
bash复制echo "always" | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
10. 常用命令速查
10.1 网络相关命令
bash复制# 查看IP地址
ip a
# 查看路由表
ip route
# 测试连通性
ping google.com
# 追踪路由
traceroute google.com
# 查看网络连接
ss -tulnp
# 抓包分析
sudo tcpdump -i eth0 -n port 80
10.2 防火墙相关命令
bash复制# firewalld基本命令
sudo firewall-cmd --list-all
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=8080/tcp
# iptables基本命令
sudo iptables -L -n -v
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables-save > /etc/iptables.rules
10.3 定时任务相关命令
bash复制# 编辑当前用户crontab
crontab -e
# 列出当前用户crontab
crontab -l
# 删除当前用户crontab
crontab -r
# 查看系统日志中的cron记录
grep CRON /var/log/syslog
10.4 权限相关命令
bash复制# 修改文件权限
chmod 755 file
# 修改文件所有者
chown user:group file
# 设置SUID
chmod u+s file
# 设置SGID
chmod g+s directory
# 设置Sticky Bit
chmod +t directory
# 查看ACL
getfacl file
# 设置ACL
setfacl -m u:user:rwx file
10.5 服务管理命令
bash复制# systemd基本命令
sudo systemctl start servicename
sudo systemctl stop servicename
sudo systemctl restart servicename
sudo systemctl status servicename
sudo systemctl enable servicename
sudo systemctl disable servicename
# 查看日志
sudo journalctl -u servicename
sudo journalctl -f
11. 实用脚本分享
11.1 自动备份脚本
bash复制#!/bin/bash
# 自动备份脚本
BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d)
TAR_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
LOG_FILE="/var/log/backup.log"
# 创建备份目录
mkdir -p $BACKUP_DIR || {
echo "$(date): 无法创建备份目录 $BACKUP_DIR" >> $LOG_FILE
exit 1
}
# 设置权限
chmod 750 $BACKUP_DIR
chown root:backup $BACKUP_DIR
# 执行备份
echo "$(date): 开始备份" >> $LOG_FILE
tar -czf $TAR_FILE /etc /home 2>> $LOG_FILE || {
echo "$(date): 备份失败" >> $LOG_FILE
exit 1
}
# 设置备份文件权限
chmod 640 $TAR_FILE
chown root:backup $TAR_FILE
# 删除旧备份
find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -delete
echo "$(date): 备份完成" >> $LOG_FILE
11.2 服务监控脚本
bash复制#!/bin/bash
# 服务监控脚本
SERVICES=("nginx" "mysql" "redis")
LOG_FILE="/var/log/service_monitor.log"
for service in "${SERVICES[@]}"; do
if ! systemctl is-active --quiet $service; then
echo "$(date): 服务 $service 已停止,尝试重启..." >> $LOG_FILE
systemctl restart $service
if systemctl is-active --quiet $service; then
echo "$(date): 服务 $service 重启成功" >> $LOG_FILE
else
echo "$(date): 服务 $service 重启失败" >> $LOG_FILE
# 发送警报
echo "服务 $service 宕机" | mail -s "服务警报" admin@example.com
fi
fi
done
11.3 系统信息收集脚本
bash复制#!/bin/bash
# 系统信息收集脚本
REPORT_FILE="/tmp/system_report_$(date +%Y%m%d).txt"
echo "===== 系统信息报告 $(date) =====" > $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== 系统基本信息 =====" >> $REPORT_FILE
uname -a >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== CPU信息 =====" >> $REPORT_FILE
lscpu >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== 内存信息 =====" >> $REPORT_FILE
free -h >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== 磁盘信息 =====" >> $REPORT_FILE
df -h >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== 网络信息 =====" >> $REPORT_FILE
ip a >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "===== 运行的服务 =====" >> $REPORT_FILE
systemctl list-units --type=service --state=running >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "报告已生成: $REPORT_FILE"
12. 进阶主题
12.1 使用Ansible自动化管理
Ansible是强大的自动化工具,可以批量管理多台服务器。基础使用:
-
安装Ansible:
bash复制sudo apt install ansible -
创建inventory文件:
ini复制[webservers] server1 ansible_host=192.168.1.101 server2 ansible_host=192.168.1.102 [dbservers] db1 ansible_host=192.168.1.201 -
测试连接:
bash复制
ansible all -m ping -u username --ask-pass -
执行命令:
bash复制ansible webservers -a "uptime" -u username -
使用playbook:
创建playbook.yml:yaml复制- hosts: webservers become: yes tasks: - name: Ensure nginx is installed apt: name: nginx state: present运行playbook:
bash复制
ansible-playbook playbook.yml -u username --ask-pass
12.2 使用Docker容器化应用
Docker可以简化应用部署和管理:
-
安装Docker:
bash复制sudo apt install docker.io sudo systemctl enable docker sudo systemctl start docker -
拉取镜像:
bash复制sudo docker pull nginx -
运行容器:
bash复制sudo docker run -d -p 80:80 --name mynginx nginx -
查看运行中的容器:
bash复制sudo docker ps -
停止容器:
bash复制sudo docker stop mynginx -
删除容器:
bash复制sudo docker rm mynginx
12.3 使用Prometheus监控系统
Prometheus是流行的监控系统:
-
下载并安装Prometheus:
bash复制wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz tar xvfz prometheus-*.tar.gz cd prometheus-* -
配置Prometheus:
编辑prometheus.yml:yaml复制global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] -
启动Prometheus:
bash复制
./prometheus --config.file=prometheus.yml -
安装Node Exporter(在被监控机器上):
bash复制wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz tar xvfz node_exporter-*.tar.gz cd node_exporter-* ./node_exporter -
配置Prometheus监控节点:
在prometheus.yml中添加:yaml复制- job_name: 'node' static_configs: - targets: ['node_ip:9100'] -
重启Prometheus:
bash复制
pkill prometheus ./prometheus --config.file=prometheus.yml
13. 常见问题解决方案
13.1 网络连接问题
问题:无法连接到特定端口
排查步骤:
-
检查服务是否监听:
bash复制
ss -tulnp | grep :port -
检查本地防火墙:
bash复制sudo iptables -L -n -
检查SELinux:
bash复制sudo ausearch -m avc -ts recent -
临时关闭防火墙测试:
bash复制sudo systemctl stop firewalld -
如果连接恢复,添加防火墙规则:
bash复制sudo firewall-cmd --permanent --add-port=port/tcp sudo firewall-cmd --reload
13.2 权限被拒绝问题
问题:Permission denied错误
解决方案:
-
检查文件权限:
bash复制ls -l /path/to/file -
检查文件所有者:
bash复制ls -ld /path/to/directory -
检查SELinux上下文:
bash复制ls -Z /path/to/file -
临时禁用SELinux测试:
bash复制sudo setenforce 0 -
如果问题解决,修复SELinux上下文:
bash复制sudo restorecon -Rv /path/to/directory
13.3 定时任务不执行
问题:cron任务没有执行
排查步骤:
-
检查cron服务状态:
bash复制sudo systemctl status cron -
检查系统日志:
bash复制
grep CRON /var/log/syslog -
检查脚本权限:
bash复制ls -l /path/to/script -
检查环境变量:
在脚本开头添加:bash复制env > /tmp/cron_env.log -
手动测试命令:
bash复制sudo -u username /path/to/script
13.4 服务启动失败
问题:systemd服务启动失败
排查步骤:
-
查看服务状态:
bash复制sudo systemctl status servicename -
查看完整日志:
bash复制sudo journalctl -u servicename -b -
检查依赖关系:
bash复制
system
