Назад | Перейти на главную страницу

Как автоматически запускать стандартные команды linux в режиме без кеширования?

Есть способ запускать команды в Linux без кеширования результата, то есть:

nocache cat big_file.txt

Есть ли способ сделать этот режим без кеширования автоматическим? Что-то вроде глобальной настройки.

Проблема: у меня есть много скриптов от поставщиков, которые используют cp или find или другие стандартные команды, и я не хочу, чтобы они загромождали мой кеш.

Мне бы очень хотелось отговорить это делать, поскольку это может закончиться столь же разрушительно. По сути, теперь вы заставите намного больше ввода-вывода, что вполне может (в зависимости от вашей настройки) в конечном итоге конкурировать с mysql для ввода-вывода, что было бы так же плохо.

Если вам действительно необходимо, сделайте обертки для 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.

Даже если вам не нужно об этом беспокоиться, вы можете удалить кэшированные файлы в памяти, если хотите, просто введите эту команду как root

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

Вот вы можете найти больше информации.

РЕДАКТИРОВАТЬ: следуя ссылке, если вы откроете 4, Linux полностью отключит кеширование файлов, что вы ищете.

Если я правильно понимаю ссылку alphamikevictor, повторение «4» в drop_caches отключает только сообщения журнала, но не кеши.

Можно добавить псевдоним к ~ / .bashrc для различных команд. Например:

псевдоним cp = 'nocache cp'

(при условии, что ваша оболочка - это bash.)

То же самое можно поместить в /etc/bash.bashrc, чтобы повлиять на всех пользователей bash в системе.