本教程提供了基于 Systemd 的 Linux 内存缓存自动清理方案。通过 Shell 脚本和 Systemd Timer 实现定时、安全的缓存清理,并包含可用内存阈值检查和完整的日志监控配置。
🛡️ Linux 自动内存缓存清理方案 (Systemd 版本)
📂 1. 创建缓存清理脚本
创建脚本文件:
sudo vim /usr/local/bin/cache_cleaner.sh
脚本内容
#!/bin/bash
# 内存缓存清理脚本 v1.2
# 安全模式:当可用内存 >20% 时不执行清理
MIN_FREE_PERCENT=20 # 触发清理的阈值
echo "[$(date +'%F %T')] 检查内存状态..."
# 获取内存信息(total, used)
read -r total used _ <<< $(free -m | awk '/Mem:/{print $2,$3}')
# 计算当前"可用率"(使用 available 字段更准确)
free_percent=$(( (total - used) * 100 / total ))
if [ "$free_percent" -lt "$MIN_FREE_PERCENT" ]; then
echo "内存可用率 ${free_percent}% < ${MIN_FREE_PERCENT}%,执行清理..."
# 安全清理步骤
sync
echo 1 > /proc/sys/vm/drop_caches
sleep 1
echo 2 > /proc/sys/vm/drop_caches
sleep 1
echo 3 > /proc/sys/vm/drop_caches
# 使用 available 字段计算最新可用百分比(更准确)
new_free=$(free -m | awk '/Mem:/{printf "%.1f", $7/$2*100}')
echo "清理完成 → 当前可用: ${new_free}%"
else
echo "内存充足 (${free_percent}%),跳过清理"
fi
设置脚本权限
sudo chmod 755 /usr/local/bin/cache_cleaner.sh
sudo chown root:root /usr/local/bin/cache_cleaner.sh
⚙️ 2. 配置 Systemd 服务单元
创建服务文件:
sudo vim /etc/systemd/system/cache_cleaner.service
服务配置内容
[Unit]
Description=Memory Cache Cleaner
After=syslog.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/cache_cleaner.sh
User=root
ProtectSystem=full
🕒 3. 创建 Systemd 定时器
创建定时器文件:
sudo vim /etc/systemd/system/cache_cleaner.timer
定时器配置内容
[Unit]
Description=Run memory cleaner every 3 hours
[Timer]
OnCalendar=*-*-* 0/3:00:00
RandomizedDelaySec=300
Persistent=true
[Install]
WantedBy=timers.target
🔧 4. 启用并测试服务
# 重载 systemd 配置
sudo systemctl daemon-reload
# 测试脚本
sudo /usr/local/bin/cache_cleaner.sh
# 启用定时器
sudo systemctl enable --now cache_cleaner.timer
# 验证状态
systemctl list-timers | grep cache_cleaner
journalctl -u cache_cleaner.service -f
📊 5. 监控与日志管理
| 命令目的 | 具体命令 |
|---|---|
| 查看最近记录 | journalctl -u cache_cleaner.service -n 10 |
| 跟踪实时日志 | journalctl -u cache_cleaner.service -f |
配置每日日志导出(可选)
# 编辑 root 的 crontab
sudo crontab -e
# 添加以下内容:
0 0 * * * journalctl -u cache_cleaner.service --since "1 day ago" > /var/log/memclean_daily.log
📝 注意事项
- 脚本会在可用内存低于 20% 时触发清理
- 使用 sync 确保数据安全
- 通过 sleep 间隔确保清理操作平滑执行
- 可以根据实际需求调整定时器间隔
- 建议定期检查日志确保服务正常运行
关于我
全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!
关注我,发现更多旧物改造的乐趣与技巧!