ฉันมีสคริปต์ทุบตีที่ทำงานตราบใดที่เครื่อง Linux เปิดอยู่ ฉันเริ่มมันดังแสดงด้านล่าง:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
หลังจาก lauches ฉันสามารถดูคำสั่ง tee ในเอาต์พุตpsของฉันได้ดังแสดงด้านล่าง
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
ฉันมีฟังก์ชั่นที่ตรวจสอบขนาดของบันทึกที่teeสร้างและฆ่าคำสั่งteeเมื่อบันทึกถึงขนาดที่แน่นอน:
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
}
ด้วยความประหลาดใจของฉันการฆ่าคำสั่งteeก็ฆ่าโดย start.sh เช่นกัน ทำไมนี้ ฉันจะจบคำสั่งteeได้อย่างไร แต่ให้ start.sh ยังคงทำงานต่อไป? ขอบคุณ
tee -a
สำหรับtee
เปิดไฟล์ในโหมดต่อท้ายมิฉะนั้นทีออฟจะทำการเขียนลงในไฟล์ที่ออฟเซ็ตเดียวกันหลังจากคุณตัดทอน (และในระบบที่ไม่รองรับไฟล์ที่กระจัดกระจายเช่นใน macOS ที่จะ จัดสรรส่วนของไฟล์ที่นำไปสู่ตำแหน่งนั้นโดยใช้พื้นที่ดิสก์เป็นสองเท่า)