Tôi có một tập lệnh bash chạy miễn là máy Linux được bật. Tôi bắt đầu nó như hình dưới đây:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Sau khi nó hoạt động, tôi có thể thấy lệnh tee trong đầu ra ps của mình như dưới đây:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
Tôi có một chức năng theo dõi kích thước của nhật ký mà tee tạo ra và giết lệnh tee khi nhật ký đạt đến một kích thước nhất định:
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
}
Trước sự ngạc nhiên của tôi, việc giết lệnh tee cũng giết chết cá thể start.sh. Tại sao lại thế này? Làm cách nào tôi có thể kết thúc lệnh tee nhưng để start.sh tiếp tục chạy? Cảm ơn.
tee -a
chotee
để mở tập tin trong chế độ append, nếu không, tee sẽ tiếp tục viết vào tập tin cùng bù đắp sau khi bạn cắt nó (và trên các hệ thống không hỗ trợ các file thưa thớt như trên hệ điều hành MacOS rằng ý chí phân bổ lại phần của tập tin dẫn đến vị trí đó, chiếm gấp đôi dung lượng đĩa).