针对 1核1G低配VPS,通过编写简单的 Shell脚本 实现“一键关闭宝塔及LNMP”和“一键恢复”,能有效节省内存(1G内存非常宝贵,闲置时释放资源很有必要)。以下是具体方案和注意事项:
前提背景:
正常情况下,当你执行
service bt stop时,只会停止上述面板自身的相关进程,但不会动你通过宝塔安装的第三方服务(比如你搭建网站用的 Nginx、存数据的 MySQL、跑 PHP 的 PHP-FPM 等)。二、此时的内存占用 vs 不安装宝塔的差异
假设你在安装宝塔后,额外安装了 LNMP 环境(Nginx + MySQL + PHP),那么:
-
不安装宝塔时:内存仅占用系统基础进程(sshd、cron、systemd 等),约 50-150MB(轻量系统);
-
安装宝塔但执行
service bt stop后:内存仍会包含第三方服务的占用(比如 Nginx 约 20-50MB、MySQL 约 100-300MB、PHP-FPM 约 30-100MB),再加上系统基础进程,总占用可能在 200-500MB+(取决于你的配置)。
核心思路
通过两个脚本实现:
-
stop_all.sh:一键停止宝塔核心服务 + LNMP组件(Nginx、MySQL、PHP-FPM等); -
start_all.sh:一键启动LNMP组件 + 宝塔核心服务。
一、脚本编写(关键步骤)
1. 准备工作:确认服务名称
先通过命令查看你实际安装的组件名称(避免脚本出错):
# 查看所有运行中服务(找LNMP相关)
systemctl list-units --type=service --state=running | grep -E 'nginx|mysql|mysqld|php-fpm|redis'
# 查看宝塔服务名称(通常是 bt)
systemctl status bt # 若能显示状态,说明服务名是 bt
假设你的组件名称为(根据实际情况修改脚本):
-
宝塔核心服务:
bt -
Web服务器:
nginx -
数据库:
mysqld(或mariadb) -
PHP-FPM:
php-fpm-74(根据你的PHP版本,如7.4) -
Redis(可选):
redis
2. 编写“一键关闭”脚本(stop_all.sh)
作用:停止宝塔核心 + LNMP所有组件,释放内存。
#!/bin/bash
echo "===== 开始关闭宝塔及LNMP服务 ====="
# 停止宝塔核心服务(面板界面和管理进程)
systemctl stop bt
systemctl disable bt # 可选:禁用开机启动(如需默认不启动)
# 停止LNMP组件(按依赖反向顺序:先停上层服务)
systemctl stop nginx # Web服务器
systemctl stop php-fpm-74 # PHP-FPM(替换为你的版本)
systemctl stop mysqld # 数据库(或 mariadb)
systemctl stop redis # 可选:Redis(若安装了)
# 可选:禁用LNMP组件开机启动(如需默认不启动)
systemctl disable nginx php-fpm-74 mysqld redis
echo "===== 所有服务已停止,内存已释放 ====="
free -m # 显示当前内存占用(验证效果)
3. 编写“一键恢复”脚本(start_all.sh)
作用:启动LNMP组件(按依赖顺序)+ 宝塔核心服务,恢复正常使用。
#!/bin/bash
echo "===== 开始启动LNMP及宝塔服务 ====="
# 启动LNMP组件(按依赖顺序:先底层服务,后上层)
systemctl start mysqld # 数据库(先启动,供PHP连接)
systemctl start php-fpm-74 # PHP-FPM(依赖数据库)
systemctl start nginx # Web服务器(依赖PHP-FPM)
systemctl start redis # 可选:Redis(若需要)
# 启用LNMP组件开机启动(可选:如需下次开机自动启动)
systemctl enable nginx php-fpm-74 mysqld redis
# 启动宝塔核心服务(面板界面)
systemctl start bt
systemctl enable bt # 可选:启用宝塔开机启动
echo "===== 所有服务已启动,宝塔面板可访问 ====="
free -m # 显示当前内存占用(验证效果)
二、使用方法
-
保存脚本:将上述两个脚本保存到
/root目录(或其他路径),例如:nano /root/stop_all.sh # 粘贴关闭脚本内容,保存退出(Ctrl+O→回车→Ctrl+X) nano /root/start_all.sh # 粘贴启动脚本内容,保存退出 -
赋予执行权限:
chmod +x /root/stop_all.sh /root/start_all.sh -
一键执行:
-
关闭所有服务:
bash /root/stop_all.sh -
恢复所有服务:
bash /root/start_all.sh
-
三、关键注意事项(1G内存优化配置)
-
1G内存的LNMP优化配置(启动前必做!否则容易OOM崩溃):
-
MySQL:编辑配置文件(
/etc/my.cnf),减小缓存:[mysqld] innodb_buffer_pool_size=64M # 默认可能128M+,1G内存建议≤64M max_connections=50 # 减少连接数 -
PHP-FPM:编辑配置文件(
/www/server/php/74/etc/php-fpm.conf),限制进程数:pm = dynamic pm.max_children = 10 # 最大进程数(1G内存建议≤15) pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5 -
Nginx:编辑配置文件(
/www/server/nginx/conf/nginx.conf),减小缓冲区:http { client_max_body_size 10m; # 减小上传限制 gzip_buffers 4 8k; # 压缩缓冲区 }
-
-
关闭不必要的组件:如果你只用静态网站,可卸载MySQL/PHP,仅保留Nginx,内存占用会更低(Nginx单实例约20-30MB)。
-
避免频繁开关:脚本本质是停止/启动服务,频繁操作可能导致数据库连接异常(如MySQL启动慢),建议仅在长期不用时关闭(如几天不用),短期不用可通过宝塔面板暂停网站(而非关闭整个服务)。
四、替代方案:更彻底的“内存节省”(适合极低负载)
如果你的VPS仅偶尔用(比如每周一次),且不需要持续运行网站,可考虑:
-
卸载宝塔面板:用命令行直接管理LNMP(适合熟悉Linux的用户),内存占用会比宝塔更低(省去宝塔核心进程的几十MB);
-
使用Docker容器:将LNMP部署在Docker中,不用时直接
docker stop 容器ID,需要时docker start,隔离性更好,但1G内存跑Docker可能稍显紧张。
总结
通过
stop_all.sh和 start_all.sh脚本,你可以一键关闭宝塔及LNMP释放内存,需要时一键恢复。关键是优化LNMP配置(减小缓存和进程数),避免1G内存溢出。操作后记得用 free -m验证内存变化,确保达到预期效果。





