Что случится, если отключить буферизацию
Привет.
На практике эффект буферизации незаметен, либо софт/скрипты и так работают в реальном времени.
Распространённый случай.
Ты всяко с таким сталкивался: запустил программу, которая пишет данные в файл. И пока софтина не отработает, файл с результатами визуально пустой. Грыжа!
Но хочется же в реальном времени наблюдать, как файл заполняется, и делать выводы. А что, если софтина работает 10 часов? А выхлоп нужен вчера?
/usr/local/sbin/script.sh &> bashdays.log
Проблема этого условного скрипта в том, что файл bashdays.log создаётся сразу, но вывод может оставаться в буфере до завершения скрипта или его принудительного сброса. Как отслеживать прогресс?
Воспользуйся отключением буферизации!
Всё делается с помощью утилиты stdbuf. Утилита изменяет способ буферизации программ.
stdbuf -oL /usr/local/sbin/script.sh &> bashdays.log
Ключ o взаимодействует со стандартным выводом (stdout). А аргумент L означает Line buffered, то есть буферизацию по строкам.
В примере выше буфер очищается после каждой строки вывода. А в файле bashdays.log появится долгожданный результат без мучительного ожидания.
Одно из применений stdbuf:
stdbuf -oL nohup /usr/local/sbin/script.sh &> bashdays.log
Если закрыть вкладку с сессией, скрипт продолжит работу.
Либо можешь воспользоваться утилитой script:
script -c <PROGRAM> -f bashdays.txt
Ключ f выполняет аналогичную функцию: после каждой операции запускается flush, запись на диск.
На этом смею откланяться, хорошего дня/вечера!








Комментарии