Saya memiliki skrip bash yang berjalan selama mesin Linux dihidupkan. Saya memulainya seperti yang ditunjukkan di bawah ini:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Setelah lauches, saya dapat melihat perintah tee di output ps saya seperti yang ditunjukkan di bawah ini:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
Saya memiliki fungsi yang memantau ukuran log yang diproduksi tee dan membunuh perintah tee ketika log mencapai ukuran tertentu:
monitor_debug_log_size() {
## Monitor the file size of the debug log to make sure it does not get too big
while true; do
cecho r "CHECKING DEBUG LOG SIZE... "
debugLogSizeBytes=$(stat -c%s "/tmp/nginx/debug_log.log")
cecho r "DEBUG LOG SIZE: $debugLogSizeBytes"
if [ $((debugLogSizeBytes)) -gt 100000 ]; then
cecho r "DEBUG LOG HAS GROWN TO LARGE... "
sleep 3
#rm -rf /tmp/nginx/debug_log.log 1>/dev/null 2>/dev/null
kill -9 `pgrep -f tee`
fi
sleep 30
done
}
Yang mengejutkan saya, membunuh perintah tee juga membunuh dengan start.sh misalnya. Kenapa ini? Bagaimana saya bisa mengakhiri perintah tee tetapi start.sh saya terus berjalan? Terima kasih.
tee -a
untuktee
membuka file dalam mode append, jika tidak, tee akan melanjutkan penulisan ke dalam file pada offset yang sama setelah Anda memotongnya (dan pada sistem yang tidak mendukung file jarang seperti pada macOS yang akan realokasi bagian file yang mengarah ke posisi itu, mengambil ruang disk dua kali lebih banyak).