#!/bin/bash # 清掉用不上的服务,给中转服务器腾内存。 # 用户明确授权:除了系统,其他装的软件都可以删。 # # 目标服务(hexo 博客那一套,hexo 目录已经删了,这套已经没意义): # apache2 网站服务 # mariadb 数据库 # php8.2-fpm PHP # 这三个加起来通常占 80~120MB,对 460MB 的机器是很大一块。 set -u echo "===== 先看现在谁在吃内存 =====" ps -eo rss,comm --sort=-rss 2>/dev/null | head -14 | \ awk 'NR==1{print " RSS(KB) 进程"} NR>1{printf " %-8s %s\n", $1, $2}' echo echo "===== 清之前 =====" free -m | head -2 # 先看这些服务在不在 TARGETS="" for svc in apache2 mariadb php8.2-fpm mysql; do if systemctl list-unit-files 2>/dev/null | grep -q "^${svc}\.service"; then TARGETS="$TARGETS $svc" fi done echo echo "找到的服务:${TARGETS:-(无)}" if [ -n "$TARGETS" ]; then for svc in $TARGETS; do systemctl stop "$svc" 2>/dev/null && echo " 已停止 $svc" systemctl disable "$svc" 2>/dev/null && echo " 已禁止开机启动 $svc" done fi echo echo "===== 停掉之后 =====" sleep 2 free -m | head -2 echo echo "===== 卸载相关软件包 =====" PKGS="" for pkg in apache2 apache2-bin apache2-data apache2-utils \ mariadb-server mariadb-server-10.11 mariadb-client \ mariadb-client-10.11 mariadb-common \ php8.2-fpm php8.2-cli php8.2-common php8.2-mysql php8.2-opcache \ libapache2-mod-php8.2; do if dpkg-query -W -f='${Status}' "$pkg" 2>/dev/null | grep -q "install ok installed"; then PKGS="$PKGS $pkg" fi done echo " 待卸载:${PKGS:-(无)}" if [ -n "$PKGS" ]; then DEBIAN_FRONTEND=noninteractive apt-get purge -y $PKGS >/dev/null 2>&1 \ && echo " 卸载完成" || echo " 卸载有报错(部分包可能被别的依赖)" DEBIAN_FRONTEND=noninteractive apt-get autoremove -y >/dev/null 2>&1 apt-get clean >/dev/null 2>&1 fi echo echo "===== 最终状态 =====" free -m | head -2 echo df -h / | tail -1 echo echo "===== 还在跑的服务 =====" systemctl list-units --type=service --state=running --no-pager --no-legend 2>/dev/null | \ awk '{print " " $1}' | head -20 echo echo "===== 内存占用 TOP =====" ps -eo rss,comm --sort=-rss 2>/dev/null | head -12 | \ awk 'NR==1{print " RSS(KB) 进程"} NR>1{printf " %-8s %s\n", $1, $2}'