linux制作一个定时清理缓存的脚本

本文详细介绍了如何创建并执行一个.sh脚本,用于Linux系统中清理缓存、同步数据,并延迟操作,重点在于清理步骤和同步机制。

1、新建一个.sh文件 

touch clear.sh

2、编辑clear.sh文件 vi clear.sh

vim clear.sh

3、内容如下

#!/bin/bash
#开始清理缓存
echo "开始清除缓存"
 
#写入硬盘,防止数据丢失
sync;sync;sync
 
#延迟10秒
sleep 10
 
#清理缓存
echo 3 > /proc/sys/vm/drop_caches

4、执行脚本

sh ./clear.sh

<think>我们正在寻找一个用于定时清理缓存Shell脚本,并配置cron定时任务。根据引用内容,有几个关键点:1.清理缓存的命令:主要是通过写入/proc/sys/vm/drop_caches来释放缓存。通常有三个级别:-echo1>/proc/sys/vm/drop_caches:释放页缓存-echo2>/proc/sys/vm/drop_caches:释放dentries和inodes-echo3>/proc/sys/vm/drop_caches:释放所有缓存(页缓存、dentries和inodes)2.引用[2]和引用[3]提供了两种不同的脚本写法,引用[2]是分步骤释放并记录日志,引用[3]是循环释放(但实际使用中通常不需要循环,而是定时执行一次)。3.引用[4]提到可以根据内存使用率来触发释放缓存,但用户问题中并未要求按内存使用率触发,所以我们先按固定时间执行。根据用户需求,我们编写一个定时清理缓存shell脚本,并配置cron任务。步骤:1.编写脚本:建议释放所有缓存(即echo3),并记录日志。2.配置cron:例如每天凌晨执行。注意:-执行清理缓存需要root权限,所以脚本需要以root用户运行(或者通过sudo配置,但通常直接以root用户配置cron更简单)。-日志文件需要可写权限。脚本示例(命名为clear_cache.sh):```bash#!/bin/bash#描述:定时清理Linux系统缓存#日志文件路径LOG_FILE="/var/log/clear_cache.log"#检查root权限if["$(id-u)"-ne0];thenecho"[$(date+'%Y-%m-%d%H:%M:%S')]错误:此脚本必须以root用户运行">>"$LOG_FILE"exit1fi#执行前同步数据到磁盘(防止数据丢失)sync#延迟1秒sleep1#开始清理缓存echo"[$(date+'%Y-%m-%d%H:%M:%S')]开始清理缓存...">>"$LOG_FILE"echo3>/proc/sys/vm/drop_caches#记录清理完成echo"[$(date+'%Y-%m-%d%H:%M:%S')]缓存清理完成">>"$LOG_FILE"```配置cron任务(root用户):1.使用`crontab-e`命令编辑root用户的cron任务表(如果当前不是root用户,请先切换到root:`sudosu`)2.添加一行,例如每天凌晨3点执行:`03***/path/to/clear_cache.sh`注意:-给脚本执行权限:`chmod+x/path/to/clear_cache.sh`-确保日志文件存在且可写(如果不存在,脚本会创建,但目录必须存在。也可以提前创建并赋予权限:`touch/var/log/clear_cache.log&&chmod666/var/log/clear_cache.log`,或者用root用户创建)另外,引用[2]中提到了分步骤释放并记录,如果用户需要更详细的步骤记录,可以参考修改脚本。但通常直接使用`echo3`即可。如果用户希望按内存使用率来触发,则需要更复杂的逻辑(如引用[4]所述),但用户问题中未提及,所以这里不展开。相关问题:1.清理缓存对系统性能有什么影响?2.如何配置按内存使用率自动清理缓存?3.清理缓存后如何验证效果?4.除了cron,还有哪些方式可以实现定时任务?以上,我们提供了定时清理缓存脚本和配置方法。</think>### Shell脚本定时清理缓存解决方案 #### 一、清理缓存Shell脚本实现 基于引用内容,以下是优化后的缓存清理脚本(保存为`/usr/local/bin/clear_cache.sh`): ```bash #!/bin/bash # 设置环境变量(解决cron环境问题) PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 日志文件路径(使用绝对路径) LOG_FILE="/var/log/cache_clean.log" # 记录开始时间 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始清理缓存" >> $LOG_FILE # 同步数据到磁盘(防止数据丢失)[^2] sync sleep 1 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 数据同步完成" >> $LOG_FILE # 清理缓存操作(三级清理) echo 1 > /proc/sys/vm/drop_caches # 释放页缓存[^2] sleep 2 echo 2 > /proc/sys/vm/drop_caches # 释放dentries和inodes sleep 2 echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存[^2] echo "[$(date '+%Y-%m-%d %H:%M:%S')] 缓存清理完成" >> $LOG_FILE # 可选:添加内存检测逻辑(参考引用[4]) # MEM_USAGE=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}') # [ $MEM_USAGE -gt 70 ] && echo "内存使用率${MEM_USAGE}% > 阈值" >> $LOG_FILE ``` #### 二、配置Cron定时任务 1. **赋予脚本执行权限** ```bash sudo chmod +x /usr/local/bin/clear_cache.sh ``` 2. **配置系统级定时任务(推荐)** ```bash sudo nano /etc/crontab ``` 添加以下内容(每天凌晨3点执行): ```bash # 清理系统缓存 0 3 * * * root /usr/local/bin/clear_cache.sh ``` 3. **用户级配置方法** ```bash crontab -e ``` 添加: ```bash # 每6小时清理一次缓存 0 */6 * * * /usr/local/bin/clear_cache.sh ``` #### 三、关键配置说明 1. **权限要求** - 脚本需`root`权限操作`/proc`系统文件[^2][^3] - 日志目录需可写权限:`sudo touch /var/log/cache_clean.log` 2. **缓存清理级别** - `echo 1`:清理缓存(PageCache) - `echo 2`:清理目录项和inode - `echo 3`:清理所有缓存(推荐)[^2] 3. **安全注意事项** ```bash # 生产环境建议添加保护措施 if [ -f /proc/sys/vm/drop_caches ]; then echo 3 > /proc/sys/vm/drop_caches else echo "系统不支持缓存清理" >> $LOG_FILE fi ``` #### 四、效果验证 1. 手动执行测试: ```bash sudo /usr/local/bin/clear_cache.sh ``` 2. 查看日志确认: ```bash tail -f /var/log/cache_clean.log ``` 正常输出示例: ``` [2023-10-05 03:00:00] 开始清理缓存 [2023-10-05 03:00:01] 数据同步完成 [2023-10-05 03:00:05] 缓存清理完成 ``` 3. 检查内存变化: ```bash free -h # 执行前后对比 ``` > **最佳实践**:首次配置后,可设置每分钟测试一次: > ```bash > * * * * * /usr/local/bin/clear_cache.sh > ``` > 确认无误后调整为实际执行频率
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值