使用 Crontab 清除内存缓存

使用 Crontab 清除内存缓存

我正在尝试使用 cron 清除内存缓存。

Cron文件:

*/2 * * * *  ~/clear_mem.sh

清除内存.sh:

#!/bin/sh
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"
touch f

每两分钟创建一次文件f。但内存不会被清除。如果我手动调用脚本,一切都会正常。为什么?

答案1

因为cron以非交互方式运行命令,所以无法sudo进行身份验证。

对于需要 root 权限的命令,您应该使用 root 的 crontab(即sudo crontab -e而不是普通的),然后完全避免在命令和脚本中crontab -e使用。sudo

您还应该提供脚本的完整路径 - 最好将其定位/usr/local/bin/clear_mem.sh在系统范围内,例如代替~/clear_mem.sh

答案2

  1. 打开终端并输入 crontab -e 来编辑 cron 作业。

  2. 如果提示您选择编辑器,请选择您喜欢的编辑器。

  3. 在文件末尾添加以下行:

    */5 * * * * /usr/bin/sync; echo 1 > /proc/sys/vm/drop_caches
    

此 cron 作业每五分钟运行一次,并执行清除内存缓存的命令。该命令将首先使用 sync 将系统缓冲区中的数据刷新到磁盘,然后将 1 写入文件/proc/sys/vm/drop_caches,告知内核删除页面缓存、dentry 和 inode。

相关内容