У меня есть скрипт, который будет передавать его вывод |tee scriptnameYYMMDD.txt
. После каждого цикла цикла for, в котором генерируется вывод, я буду поменять содержимое файла tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt
так, чтобы вывод журнала был виден в окне браузера с самыми новыми строками вверху.
У меня будет несколько сценариев, делающих это параллельно. Я пытаюсь минимизировать активность диска, поэтому вывод с |tee scriptnameYYYYMMDD.txt
RAM-диска был бы наилучшим. mktemp
создает файл в /tmp
папке, но это не похоже на диск.
shell-script
files
filesystems
scripting
tmp
user208145
источник
источник
fstab
, чтобы смонтироватьtmpfs
на ,/tmp
а затем перезагрузить машину.tail
добавления файлов (или инициации его через CGI по запросу или что-то в этом роде), а неtac
всего этого.TEMPPATH="/ramdisk"
LOGPATH="/var/www/html/log"
...echo <various calls to echo> | tee -a $TEMPPATH/moveKRT$(date '+%Y%m%d').txt
... в конце цикла for, у меня естьcp $TEMPPATH/moveKRT$(date '+%Y%m%d').txt $LOGPATH/moveKRT$(date '+%Y%m%d').txt
tac $TEMPPATH/moveKRT$(date '+%Y%m%d').txt > $LOGPATH/moveKRT.txt
небольшая вероятность того, что изменение с 23: 59: 59.999 на 00:00: 00 может повлиять на некоторые файлы, но вероятность приемлема.Ответы:
Вы можете смонтировать
tmpfs
раздел и записать туда файл:Этот раздел теперь ограничен 500 МБ. Если ваш временный файл становится больше , чем 500 МБ возникает ошибка:
no space left on device
. Но это не имеет значения, когда вы указываете больший объем памяти, чем у вашей системы.tmpfs
также использует пространство подкачки, поэтому вы не можете вызвать сбой системы, в отличие отramfs
.Теперь вы можете написать свой файл в
/mountpoint
:источник
size=[num]%
тоже хорошо - tmpfs может быть ограничен процентом доступной памяти. Обычно это проще сделать, если команды не всегда предназначены для одной и той же (реальной / виртуальной) машины. Также удобно, что tmpfs не удаляет содержимое с /-o remount,size=newsize
.mount
не позволяя пользователям некорневых использовать-t
или-o
? То есть, как можно создавать сценарии, которые используютtmpfs
(или ОЗУ любым другим способом) для экономии на операциях на диске, если подходящая файловая система еще не существует в системе?Попробуйте это с Ubuntu:
источник
/run/shm/
? Могу ли я применитьchmod
изменения к временному файлу при необходимости? Я заметил, что биты режима папки идентичны/tmp
папке. Спасибо./run/shm
(symlink to/dev/shm
),mktemp
также имеют разрешение по умолчанию-rw-------
(600), и вы можете изменить его при необходимости с помощьюsudo chmod
.Следующий ответ был обнаружен путем изучения предыдущих ответов и информации в этом вопросе здесь, и не было бы найдено без них. Слава им.
В моей системе linuxmint (и я бы предположил, что большинство систем на основе Ubuntu и, возможно, на основе Debian) есть пользовательские tmpfs, автоматически смонтированные на
/run/user/1000/
Используйте
df -T
для проверки.В разделе
/run/user/
есть каталог для каждого обычного пользователя в системе.Эти каталоги названы в соответствии с их идентификаторами пользователя. Мы можем получить идентификатор пользователя,
id -u
см.man id
Подробности об этой команде.Затем мы можем использовать
mktemp
команду с--tmpdir
опцией для создания временных файлов и каталогов в этой системе временных файлов, создавая тем самым временные файлы в оперативной памяти.Следуя приведенному здесь совету, я сначала создаю временный каталог, а затем создаю свои временные файлы в нем:
создать временную папку ,
/run/user/1000/bash.w42BYxbG/
тосоздать временный файл в нем.
Это делает очистку этих файлов легкой, поскольку все, что мне нужно сделать, это
rm -r $mydir
.По умолчанию все эти файлы принадлежат и доступны для чтения только пользователю, который их создал.
источник
/run/user/1000
доступно в каждом linux, использующем systemd, поэтому оно доступно не только в системах на основе debian, но и в большинстве других дистрибутивов linux. Если нет, вместо этого следует использовать / tmp. Вы можете упростить ваши команды, используя переменную $ XDG_RUNTIME_DIR, которая уже содержит правильный каталог для каждого пользователя. Для получения дополнительной информации, проверьте, например, этот ответ: unix.stackexchange.com/questions/162900/…Как я понимаю, эти цели являются: (1) действительно сохранить перевернутый файл на диск, который будет поданы в браузер (примечание: это может быть TMPFS и т.д., как и все другие ответы уже подробно); но (2) избегайте записи первого файла tmp на диск с исходным выводом; и все же, (3) по-прежнему отображать исходный вывод на стандартный вывод.
Если это так, то следующее может удовлетворить ваши потребности, используя замену процесса bash (то есть, в основном, именованный канал):
Обратите внимание, что это непрерывная печать вывода в stdout, и когда команда заканчивается (когда ваш цикл завершается), инвертирует этот вывод и записывает его в выходной файл. Проиллюстрировано следующим образом, который печатает одну строку в секунду, а после завершения файл
/tmp/foo.txt
содержит перевернутые строки:источник