服务器突然磁盘爆满 php无法启动
直接让豆包来清理垃圾,然后可以,php可以启动了。
一、一行代码,直接运行
#!/bin/bash; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'; echo -e "${GREEN}===== 开始清理核心日志 =====${NC}"; LOG_PATHS=("/usr/local/nginx/logs/access.log" "/usr/local/openresty/nginx/logs/access.log" "/www/server/nginx/logs/access.log" "/var/log/nginx/access.log" "/usr/local/nginx/logs/error.log" "/usr/local/openresty/nginx/logs/error.log" "/www/server/nginx/logs/error.log" "/var/log/nginx/error.log"); for LOG in "${LOG_PATHS[@]}"; do [ -f "$LOG" ] && > "$LOG" && echo -e "${GREEN}✅ 已清空:$LOG${NC}"; done; PHP_LOG_PATHS=("/usr/local/php/var/log/php-fpm.log" "/www/server/php/*/var/log/php-fpm.log" "/var/log/php-fpm.log" "/usr/local/php7/var/log/php-fpm.log" "/usr/local/php8/var/log/php-fpm.log"); for LOG in "${PHP_LOG_PATHS[@]}"; do if echo "$LOG" | grep -q '*'; then for REAL_LOG in $LOG; do [ -f "$REAL_LOG" ] && > "$REAL_LOG" && echo -e "${GREEN}✅ 已清空:$REAL_LOG${NC}"; done; elif [ -f "$LOG" ]; then > "$LOG" && echo -e "${GREEN}✅ 已清空:$LOG${NC}"; fi; done; echo -e "\n${GREEN}===== 清理系统临时文件 =====${NC}"; > /var/log/messages 2>/dev/null; > /var/log/secure 2>/dev/null; rm -rf /tmp/* /var/tmp/* /var/lib/php/session/* 2>/dev/null; command -v yum >/dev/null && yum clean all >/dev/null 2>&1; command -v apt >/dev/null && apt clean all >/dev/null 2>&1; echo -e "${GREEN}✅ 已清理系统日志/临时文件/软件缓存${NC}"; echo -e "\n${GREEN}===== 重启核心服务 =====${NC}"; SERVICES=("nginx" "php-fpm" "mysqld" "mysql"); for SERVICE in "${SERVICES[@]}"; do if systemctl is-active --quiet $SERVICE; then systemctl reload $SERVICE 2>/dev/null || systemctl restart $SERVICE 2>/dev/null; echo -e "${GREEN}✅ $SERVICE 重启成功${NC}"; fi; done; echo -e "\n${GREEN}===== 清理完成 - 磁盘状态 =====${NC}"; df -h | grep -E 'Filesystem|/dev/vda1|/dev/sda1'; echo -e "\n${GREEN}===== 核心服务状态 =====${NC}"; for SERVICE in "${SERVICES[@]}"; do STATUS=$(systemctl status $SERVICE --no-pager 2>/dev/null | grep Active | awk '{print $2}'); [ -n "$STATUS" ] && echo -e "$SERVICE: ${GREEN}$STATUS${NC}"; done二、保存为脚本文件(推荐,可重复使用):
#!/bin/bash
# 通用磁盘清理脚本(适配 Nginx/OpenResty/宝塔/自定义环境)
# 核心:清理日志+临时文件+重启服务,无环境限制
# 颜色定义(可选,去掉不影响功能)
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# ====================== 核心清理:Nginx/OpenResty 日志(全路径适配) ======================
echo -e "${GREEN}===== 开始清理核心日志 =====${NC}"
# 覆盖所有常见日志路径(Nginx/OpenResty/宝塔)
LOG_PATHS=(
"/usr/local/nginx/logs/access.log"
"/usr/local/openresty/nginx/logs/access.log"
"/www/server/nginx/logs/access.log" # 宝塔 Nginx 路径
"/var/log/nginx/access.log"
"/usr/local/nginx/logs/error.log"
"/usr/local/openresty/nginx/logs/error.log"
"/www/server/nginx/logs/error.log" # 宝塔 Nginx 路径
"/var/log/nginx/error.log"
)
# 清空日志(仅清理存在的文件,不中断脚本)
for LOG in "${LOG_PATHS[@]}"; do
if [ -f "$LOG" ]; then
> "$LOG"
echo -e "${GREEN}✅ 已清空:$LOG${NC}"
fi
done
# ====================== 清理 PHP-FPM 日志(适配所有环境) ======================
PHP_LOG_PATHS=(
"/usr/local/php/var/log/php-fpm.log"
"/www/server/php/*/var/log/php-fpm.log" # 宝塔多版本 PHP 路径
"/var/log/php-fpm.log"
"/usr/local/php7/var/log/php-fpm.log"
"/usr/local/php8/var/log/php-fpm.log"
)
for LOG in "${PHP_LOG_PATHS[@]}"; do
# 兼容宝塔通配符路径
if echo "$LOG" | grep -q '*'; then
for REAL_LOG in $LOG; do
[ -f "$REAL_LOG" ] && > "$REAL_LOG" && echo -e "${GREEN}✅ 已清空:$REAL_LOG${NC}"
done
elif [ -f "$LOG" ]; then
> "$LOG"
echo -e "${GREEN}✅ 已清空:$LOG${NC}"
fi
done
# ====================== 清理系统临时文件(所有环境通用) ======================
echo -e "\n${GREEN}===== 清理系统临时文件 =====${NC}"
> /var/log/messages 2>/dev/null
> /var/log/secure 2>/dev/null
rm -rf /tmp/* /var/tmp/* /var/lib/php/session/* 2>/dev/null
# 兼容 yum/apt 两种包管理器
command -v yum >/dev/null && yum clean all >/dev/null 2>&1
command -v apt >/dev/null && apt clean all >/dev/null 2>&1
echo -e "${GREEN}✅ 已清理系统日志/临时文件/软件缓存${NC}"
# ====================== 重启核心服务(通用 systemctl 命令) ======================
echo -e "\n${GREEN}===== 重启核心服务 =====${NC}"
# 重启 Nginx/PHP-FPM/MySQL(失败不报错,兼容无对应服务的环境)
SERVICES=("nginx" "php-fpm" "mysqld" "mysql") # 兼容 mysql/mysqld 服务名
for SERVICE in "${SERVICES[@]}"; do
if systemctl is-active --quiet $SERVICE; then
systemctl reload $SERVICE 2>/dev/null || systemctl restart $SERVICE 2>/dev/null
echo -e "${GREEN}✅ $SERVICE 重启成功${NC}"
fi
done
# ====================== 基础验证(通用) ======================
echo -e "\n${GREEN}===== 清理完成 - 磁盘状态 =====${NC}"
df -h | grep -E 'Filesystem|/dev/vda1|/dev/sda1' # 兼容常见根分区
echo -e "\n${GREEN}===== 核心服务状态 =====${NC}"
for SERVICE in "${SERVICES[@]}"; do
STATUS=$(systemctl status $SERVICE --no-pager 2>/dev/null | grep Active | awk '{print $2}')
[ -n "$STATUS" ] && echo -e "$SERVICE: ${GREEN}$STATUS${NC}"
done# 创建脚本
vim /root/clean_general.sh
# 粘贴极简通用版脚本内容
chmod +x /root/clean_general.sh
# 执行
/root/clean_general.sh其他:豆包给的啊,没测试
其他:
一键配置日志轮转(通用版,适配所有环境)
# 极简日志轮转配置(仅核心规则,无重启/压缩可选)
echo -e "/usr/local/nginx/logs/*.log\n/usr/local/openresty/nginx/logs/*.log\n/var/log/nginx/*.log {\n daily\n rotate 7\n missingok\n notifempty\n}\n/usr/local/php/var/log/*.log {\n daily\n rotate 7\n missingok\n notifempty\n}" > /etc/logrotate.d/general_logs && echo "✅ 极简版日志轮转配置成功"无需等凌晨,可执行以下命令查看系统的 logrotate 定时任务,确认配置会被自动执行:
# 查看 logrotate 定时任务
cat /etc/cron.daily/logrotate
# 输出包含 "/usr/sbin/logrotate /etc/logrotate.conf" 即为正常系统会每天执行 /etc/cron.daily/logrotate,自动读取 /etc/logrotate.d/ 下的所有配置(包括你刚创建的 general_logs)。
一行代码恢复原样(删除日志轮转配置)
find /usr/local/openresty/nginx/logs/ /usr/local/nginx/logs/ -name "*.log-*" -delete && echo "✅ 已删除轮转生成的旧日志"仅删除我们创建的 general_logs 配置文件,不影响系统原有配置;
删除后,日志会回到「一直写入、不自动切分 / 删除」的原始状态;
已切分的旧日志不会被删除,如需清理可手动删 .log-日期/.log.gz 文件。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。