我正在尝试使用 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
打开终端并输入 crontab -e 来编辑 cron 作业。
如果提示您选择编辑器,请选择您喜欢的编辑器。
在文件末尾添加以下行:
*/5 * * * * /usr/bin/sync; echo 1 > /proc/sys/vm/drop_caches
此 cron 作业每五分钟运行一次,并执行清除内存缓存的命令。该命令将首先使用 sync 将系统缓冲区中的数据刷新到磁盘,然后将 1 写入文件/proc/sys/vm/drop_caches
,告知内核删除页面缓存、dentry 和 inode。