Saya memiliki skrip yang akan mengirimkan outputnya ke |tee scriptnameYYMMDD.txt
. Setelah setiap siklus loop for di mana output dihasilkan, saya akan membalikkan isi file dengan tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt
sehingga output log terlihat di jendela browser dengan baris terbaru di atas.
Saya akan meminta beberapa skrip melakukan ini secara paralel. Saya mencoba meminimalkan aktivitas disk, jadi output dari |tee scriptnameYYYYMMDD.txt
ke RAMdisk akan lebih baik. mktemp
membuat file di /tmp
folder, tetapi itu tampaknya tidak off-disk.
shell-script
files
filesystems
scripting
tmp
pengguna208145
sumber
sumber
fstab
untuk me-mounttmpfs
pada/tmp
dan kemudian reboot mesin.tail
untuk menambahkan file secara bertahap (atau memprakarsai melalui CGI atas permintaan atau sesuatu) daripadatac
melakukan semuanya.TEMPPATH="/ramdisk"
LOGPATH="/var/www/html/log"
...echo <various calls to echo> | tee -a $TEMPPATH/moveKRT$(date '+%Y%m%d').txt
... pada akhir untuk loop, saya tahucp $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
saya kemungkinan kecil bahwa perubahan dari 23: 59: 59,999 menjadi 00:00: 00 dapat memengaruhi beberapa file, tetapi peluangnya dapat diterima.Jawaban:
Anda dapat me-mount
tmpfs
partisi dan menulis file di sana:Partisi ini sekarang dibatasi hingga 500 MB. Jika file sementara Anda tumbuh lebih besar dari 500 MB kesalahan akan terjadi:
no space left on device
. Tapi, tidak masalah ketika Anda menentukan jumlah ruang yang lebih besar daripada yang dimiliki RAM sistem Anda.tmpfs
menggunakan ruang swap juga, jadi Anda tidak bisa memaksakan sistem crash, sebagai lawannyaramfs
.Anda sekarang dapat menulis file Anda ke
/mountpoint
:sumber
size=[num]%
juga baik - tmpfs dapat dibatasi hingga persentase memori yang tersedia. Biasanya lebih mudah seperti itu jika perintah tidak selalu ditargetkan untuk mesin (nyata / virtual) yang sama . Juga berguna adalah bahwa tmpfs tidak menjatuhkan konten dengan /-o remount,size=newsize
.mount
tanpa mengizinkan pengguna non-root untuk menggunakan-t
atau-o
? Yaitu, bagaimana caranya membuat skrip yang menggunakantmpfs
(atau RAM dengan cara lain) untuk menghemat operasi disk, jika sistem file yang sesuai belum ada pada sistem?Coba ini dengan Ubuntu:
sumber
/run/shm/
? Bisakah saya menerapkanchmod
perubahan pada file sementara jika diperlukan? Saya perhatikan bahwa bit mode folder identik dengan/tmp
folder. Terima kasih./run/shm
(symlink to/dev/shm
) olehmktemp
juga memiliki izin default-rw-------
(600) dan Anda dapat mengubahnya jika diperlukan dengansudo chmod
.Jawaban berikut ditemukan dengan menyelidiki jawaban sebelumnya dan info dalam pertanyaan ini di sini dan tidak akan ditemukan tanpa jawaban itu. Cudos kepada mereka.
Pada sistem linuxmint saya (dan saya akan menganggap sebagian besar sistem berbasis ubuntu dan mungkin berbasis debian juga) ada tmpfs milik pengguna yang dipasang secara otomatis pada
/run/user/1000/
Gunakan
df -T
untuk memeriksa.Di bawah ini
/run/user/
ada direktori untuk setiap pengguna normal pada sistemDirektori ini dinamai sesuai id pengguna masing-masing. Kita bisa mendapatkan id pengguna dengan
id -u
melihatman id
detail pada perintah ini.Kita kemudian dapat menggunakan
mktemp
perintah dengan--tmpdir
opsi untuk membuat file temp dan direktori dalam sistem tempfiles ini sehingga membuat tempfile dalam RAM.Mengikuti saran yang diberikan di sini saya membuat direktori temp terlebih dahulu dan kemudian membuat file temp saya di dalamnya:
untuk membuat direktori temp
/run/user/1000/bash.w42BYxbG/
laluuntuk membuat tempfile di dalamnya.
Ini membuat membersihkan file ini mudah karena yang harus saya lakukan adalah
rm -r $mydir
.Secara default semua file ini dimiliki dan hanya dapat dibaca oleh pengguna yang membuatnya.
sumber
/run/user/1000
tersedia di setiap linux yang menggunakan systemd, jadi tidak hanya tersedia di sistem berbasis debian, tetapi juga di sebagian besar distribusi linux lainnya. Jika tidak, / tmp harus digunakan sebagai gantinya. Anda dapat menyederhanakan perintah Anda dengan menggunakan variabel $ XDG_RUNTIME_DIR yang sudah menyimpan direktori yang benar untuk setiap pengguna. Untuk info lebih lanjut, periksa misalnya jawaban ini: unix.stackexchange.com/questions/162900/…Seperti yang saya mengerti, tujuan adalah: (1) jangan menyimpan file terbalik ke disk, untuk dilayani ke browser (catatan: ini bisa menjadi tmpfs, dll, karena semua jawaban yang lain sudah rinci); tetapi, (2) hindari menulis file tmp pertama ke disk, dengan output asli; namun, (3) masih menampilkan output asli ke stdout.
Jika demikian, maka yang berikut mungkin memenuhi kebutuhan Anda, menggunakan substitusi proses bash (yaitu, pada dasarnya pipa bernama):
Perhatikan bahwa ini terus mencetak output ke stdout, dan ketika perintah berakhir (ketika loop Anda berakhir), membalikkan output itu dan menulisnya ke file output. Diilustrasikan melalui yang berikut ini, yang mencetak satu baris per detik, dan setelah penghentian, file
/tmp/foo.txt
berisi baris yang terbalik:sumber