如何在nocache模式下自动运行标准linux命令?

如何在nocache模式下自动运行标准linux命令?

有一种方法可以在Linux中运行命令而不缓存结果,即:

nocache cat big_file.txt

有没有办法让这个 nocache 模式自动化?就像全局设置一样。

问题:我有很多使用cpfind其他标准命令的供应商脚本,我不希望它们弄乱我的缓存。

答案1

我真的不建议这样做,因为这样做最终可能会造成同样的破坏。你现在实际上会强制执行更多的 IO,这很可能(取决于你的设置)最终与 mysql 争夺 IO,结果同样糟糕。

如果确实必须,请在单独的目录中为 cp/find/etc 制作包装器,然后首先将其填充到供应商脚本执行环境的 PATH 中。即

mkdir /opt/evil
echo -en "#! /bin/bash\nexec nocache /bin/cp \"\${@}\"\n" >/opt/evil/cp
chmod a+x /opt/evil/cp
# repeat for find and any other things you want to be run with nocache
export PATH=/opt/evil:${PATH}
vendor-script.sh

此外 - 如果您使用 InnoDB,IIRC 它会执行自己的进程内缓存,并且不会(严重)依赖 linux 页面缓存。

答案2

即使你不需要担心它,你也可以在需要的时候删除内存缓存文件,只需以 root 身份发出此命令即可

sync && echo 3 > /proc/sys/vm/drop_caches

这里您可以找到更多信息。

编辑:如果您按照链接回显 4,那么 linux 将完全禁用文件缓存,这正是您所寻找的。

答案3

如果我正确理解了 alphamikevictor 的链接,则在 drop_caches 中回显“4”只会禁用日志消息,而不会禁用缓存。

可以为各种命令添加 ~/.bashrc 的别名。例如:

别名 cp='nocache cp'

(假设 bash 是你的 shell。)

可以将同样的东西放入 /etc/bash.bashrc 中以影响系统上的所有 bash 用户。

相关内容