Mam skrypt, do którego potokuje dane wyjściowe |tee scriptnameYYMMDD.txt
. Po każdym cyklu pętli for, w której generowane jest wyjście, będę odwracał zawartość pliku tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt
, aby wynik dziennika był widoczny w oknie przeglądarki z najnowszymi wierszami u góry.
Będę miał kilka skryptów wykonujących to równolegle. Próbuję zminimalizować aktywność dysku, więc wyjście z dysku |tee scriptnameYYYYMMDD.txt
RAM byłoby najlepsze. mktemp
tworzy plik w /tmp
folderze, ale nie wydaje się, aby znajdował się poza dyskiem.
shell-script
files
filesystems
scripting
tmp
użytkownik208145
źródło
źródło
fstab
w celu zamontowaniatmpfs
na/tmp
i uruchom ponownie komputer.tail
tworzenie plików (lub inicjowanie ich za pomocą CGI na żądanie lub coś takiego) zamiasttac
całości.TEMPPATH="/ramdisk"
LOGPATH="/var/www/html/log"
...echo <various calls to echo> | tee -a $TEMPPATH/moveKRT$(date '+%Y%m%d').txt
... na zakończenie pętli 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
mam świadomość niewielkiej możliwości, że zmiana z 23: 59: 59.999 na 00:00: 00 może wpływać na niektóre pliki, ale szansa jest do zaakceptowania.Odpowiedzi:
Możesz zamontować
tmpfs
partititon i tam zapisać plik:Ta partycja jest teraz ograniczona do 500 MB. Jeśli plik tymczasowy rośnie większy niż 500 MB wystąpi błąd:
no space left on device
. Ale nie ma znaczenia, kiedy określisz więcej miejsca niż systemowa pamięć RAM.tmpfs
używa również przestrzeni wymiany, więc nie można wymusić awarii systemu, w przeciwieństwie doramfs
.Możesz teraz zapisać swój plik w
/mountpoint
:źródło
size=[num]%
jest również w porządku - tmpfs można ograniczyć do procentu dostępnej pamięci. Zwykle jest to łatwiejsze, jeśli polecenia nie zawsze są skierowane do tej samej (rzeczywistej / wirtualnej) maszyny. Przydatne jest również to, że tmpfs nie upuszcza zawartości w /-o remount,size=newsize
.mount
nie pozwalając użytkownikom innym niż root używać-t
albo-o
? To znaczy, jak budować skrypty, które używajątmpfs
(lub RAM w jakikolwiek inny sposób), aby oszczędzać na operacjach na dysku, jeśli odpowiedni system plików nie istnieje jeszcze w systemie?Wypróbuj to z Ubuntu:
źródło
/run/shm/
? Czychmod
w razie potrzeby mogę zastosować zmiany do pliku tymczasowego? Zauważyłem, że bity trybu folderu są identyczne z/tmp
folderem. dzięki./run/shm
(dowiązanie symboliczne/dev/shm
)mktemp
również mają domyślne uprawnienie-rw-------
(600) i można je zmienić w razie potrzeby za pomocąsudo chmod
.Poniższa odpowiedź została odkryta przez zbadanie poprzednich odpowiedzi i informacji zawartych w tym pytaniu tutaj i nie zostałaby znaleziona bez nich. Cudos do nich.
W moim systemie linuxmint (i zakładałbym, że większość systemów opartych na Ubuntu i prawdopodobnie również opartych na Debianie) istnieje tmpfs należący do użytkownika montowany automatycznie na
/run/user/1000/
Użyj,
df -T
aby sprawdzić.Poniżej
/run/user/
znajduje się katalog dla każdego normalnego użytkownika w systemieTe katalogi są nazwane na podstawie identyfikatorów odpowiednich użytkowników. Możemy uzyskać identyfikator użytkownika za pomocą
id -u
zobaczman id
szczegóły na temat tego polecenia.Następnie możemy użyć
mktemp
polecenia z--tmpdir
opcją tworzenia plików tymczasowych i katalogów w tym systemie plików tymczasowych, tworząc w ten sposób pliki tymczasowe w pamięci RAM.Zgodnie z podanymi tutaj poradami najpierw tworzę katalog tymczasowy, a następnie tworzę w nim pliki tymczasowe:
utworzyć katalog temp
/run/user/1000/bash.w42BYxbG/
następnieaby utworzyć w nim plik tymczasowy.
Ułatwia to czyszczenie tych plików, ponieważ wszystko, co muszę zrobić, to
rm -r $mydir
.Domyślnie wszystkie te pliki są własnością i są czytelne tylko dla użytkownika, który je utworzył.
źródło
/run/user/1000
jest dostępny na każdym Linuksie, który używa systemd, więc jest dostępny nie tylko w systemach opartych na Debianie, ale także w większości innych dystrybucji Linuksa. Jeśli nie, zamiast tego należy użyć / tmp. Możesz uprościć swoje polecenia, używając zmiennej $ XDG_RUNTIME_DIR, która już utrzymuje prawidłowy katalog dla każdego użytkownika. Aby uzyskać więcej informacji, sprawdź np. Tę odpowiedź: unix.stackexchange.com/questions/162900/…Jak rozumiem, cele są następujące: (1) czy zapisać plik na dysku odwrócony, aby Mu służono, w przeglądarce (Uwaga: to może być tmpfs, itp, jak wszystkie inne odpowiedzi już szczegół); ale (2) unikaj zapisywania pierwszego pliku tmp na dysk z oryginalnym wyjściem; a jednak (3) nadal wyświetla oryginalne wyjście na standardowe wyjście.
Jeśli tak, to następujące mogą spełniać twoje potrzeby, używając podstawienia procesu bash (tzn. W zasadzie nazwanego potoku):
Zauważ, że jest to ciągłe drukowanie wyjścia na standardowe wyjście, a gdy polecenie się kończy (kiedy pętla się kończy), odwraca to wyjście i zapisuje je w pliku wyjściowym. Zilustrowano to następująco, która drukuje jedną linię na sekundę, a po zakończeniu plik
/tmp/foo.txt
zawiera odwrócone linie:źródło