นั่นคือวิธีที่ฉันเริ่มทำเช่นนี้ แต่มีความซับซ้อนมากขึ้นด้วย สองสิ่งที่ต้องคำนึงถึง:
- หากส่วนท้ายของบันทึกมี "server is up" อยู่แล้ว
- สิ้นสุดกระบวนการหางโดยอัตโนมัติเมื่อพบแล้ว
ฉันใช้บางสิ่งบางอย่างตามแนวนี้:
RELEASE=/tmp/${RANDOM}$$
(
trap 'false' 1
trap "rm -f ${RELEASE}" 0
while ! [ -s ${RELEASE} ]; do sleep 3; done
# You can put code here if you want to do something
# once the grep succeeds.
) & wait_pid=$!
tail --pid=${wait_pid} -F /path/to/serverLog \
| sed "1,10d" \
| grep "server is up" > ${RELEASE}
มันทำงานได้โดยtail
เปิดค้างไว้จนกว่า${RELEASE}
ไฟล์จะมีข้อมูล
เมื่อgrep
ประสบความสำเร็จ:
- เขียนผลลัพธ์
${RELEASE}
ที่จะ
- ยุติ
${wait_pid}
กระบวนการเพื่อ
- ออกจาก
tail
หมายเหตุ: sed
สามารถมีความซับซ้อนมากขึ้นในการกำหนดจำนวนบรรทัดที่tail
จะสร้างเมื่อเริ่มต้นและลบหมายเลขนั้น แต่โดยทั่วไปมันคือ 10
tail -F
ในการจัดการเข้าสู่ระบบหมุน - คือmy.log
จะเต็มและย้ายไปmy.log.1
และขั้นตอนของคุณจะสร้างใหม่my.log