nohup.out
ไฟล์ของฉันเติบโตอย่างรวดเร็ว
ฉันกำลังเรียกใช้แอปพลิเคชั่นอยู่เบื้องหลังมันกำลังเขียนnohup.out
ไฟล์
ตอนนี้ฉันต้องหมุนnohup.out
ไฟล์โดยไม่ฆ่าแอปพลิเคชันของฉัน สามารถทำได้หรือไม่
nohup.out
ไฟล์ของฉันเติบโตอย่างรวดเร็ว
ฉันกำลังเรียกใช้แอปพลิเคชั่นอยู่เบื้องหลังมันกำลังเขียนnohup.out
ไฟล์
ตอนนี้ฉันต้องหมุนnohup.out
ไฟล์โดยไม่ฆ่าแอปพลิเคชันของฉัน สามารถทำได้หรือไม่
คำตอบ:
คุณควรจะดูที่โบยlogrotate
ร่วมกับ หากคุณSIGHUP
ไพพ์เอาท์พุทแอปพลิเคชันของคุณผ่านขั้นตอนนี้คุณก็สามารถทำกระบวนการ flog โดยไม่ต้องฆ่าแอปพลิเคชันที่ทำงานอยู่
flog (ตัวบันทึกไฟล์) เป็นโปรแกรมที่อ่านอินพุตจาก STDIN และเขียนลงไฟล์
หากได้รับ SIGHUP ไฟล์จะถูกเปิดอีกครั้งเพื่อให้สามารถหมุนบันทึกได้ [ดู logrotate (8) บน RH]
ไฟล์บันทึกจะเปิดขึ้นมาใหม่หาก flog ตรวจพบว่ามีการหมุนเกิดขึ้น (เช่นไฟล์เก่าหายไปหรือเปลี่ยน inode) flog มีขนาดเล็กมาก (น้อยกว่า 500 ไบต์หน่วยความจำ)
To save output to FILE, use 'nohup COMMAND > FILE'
คุณไม่สามารถหมุนได้ คุณสามารถตัดมันด้วยคำสั่ง>nohup.out
ซึ่งจะลบเนื้อหาทั้งหมดในไฟล์
คุณสามารถคัดลอกไฟล์ก่อนแล้วจึงตัดมันถ้าคุณต้องการบันทึกผลลัพธ์ แต่มีหน้าต่างเล็ก ๆ สำหรับการแข่งขันซึ่งสามารถเขียนเอาต์พุตได้หลังจากที่คุณคัดลอกไฟล์ แต่ก่อนที่คุณจะตัดทอน เอาต์พุตใด ๆ ที่เขียนระหว่างหน้าต่างนั้นจะหายไปตลอดกาล
copytruncate
logrotate
แต่nohup.out
ไม่ค่อยเป็นชนิดของไฟล์ที่คุณจะกำหนดค่างาน cron ให้หมุน
คุณทำไม่ได้
คุณสามารถยกเลิกการเชื่อมโยงไฟล์ (rm) แต่ข้อมูลยังคงมีรอยบนดิสก์และจะถูกเขียนต่อไปตราบใดที่มีการจัดการไฟล์ที่เปิดอยู่
คุณสามารถเปลี่ยนชื่อไฟล์ได้ - แต่ก็ไม่ได้เป็นการหยุดเขียน (แต่ถ้าคุณเริ่มงานแบ็คกราวน์เป็นประจำงานใหม่จะเขียนเป็นไฟล์เดียวกัน)
คุณควรเปลี่ยนเส้นทางงานไปยังสิ่งที่ออกแบบมาเพื่อจัดการสิ่งนี้อย่างชัดเจน (เช่นapache rotatelogs )
ไม่แน่ใจว่าฉันสายเกินไปหรือไม่ แต่สำหรับคนอื่น ๆ ที่สะดุดกับฟอรัมนี้ตอนนี้ฉันไม่ต้องลองอะไรกับโบยหรืออะไรเลย
งานของฉันเริ่มต้นง่ายๆเช่นนี้:
nohup <my process> &
นี่เป็นการเริ่มงานของฉันและเริ่มผนวกท้าย nohup.out ในไดเรกทอรีนั้น
สิ่งที่ฉันต้องทำคือติดตั้ง logrotate ซึ่งมักจะมาพร้อมกับ distro และกำหนดค่าบางอย่างเช่นนี้ /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
และมันก็ใช้งานได้ !! nohup.out กำลังถูกตัดทอนในขณะที่รับผนวกใหม่ในไฟล์เดียวกัน กระบวนการก็ไม่ได้ตายเช่นกัน และ nohup ใหม่แบบใหม่nohup.out-20190528
นี้ถูกสร้างขึ้น
หวังว่านี่จะช่วยได้
Logrotate มีตัวเลือก copytruncate ซึ่งจะตัดทอน (ว่าง) ไฟล์ที่คุณระบุหลังจากที่มันถูกคัดลอกไปยังรูปแบบการหมุนปกติ (และการบีบอัดหากมีการตั้งค่า)
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
จากmanpage logrotate
คุณสามารถทำสิ่งนี้:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
คุณไม่จำเป็นต้องฆ่าแอพของคุณ