ฉันต้องการที่จะเห็นสิ่งที่เกิดขึ้นในโฟลเดอร์เซิร์ฟเวอร์แอปของฉันคือไฟล์ใดบ้างที่ถูกเปลี่ยนแปลงโดยกระบวนการ x หรือ*.war
ไฟล์ใดที่มีการเปลี่ยนแปลง (แทนที่ / สร้าง) ในช่วง x นาทีสุดท้าย
มีเครื่องมือใน Linux เพื่อช่วยในเรื่องนี้หรือไม่?
ฉันต้องการที่จะเห็นสิ่งที่เกิดขึ้นในโฟลเดอร์เซิร์ฟเวอร์แอปของฉันคือไฟล์ใดบ้างที่ถูกเปลี่ยนแปลงโดยกระบวนการ x หรือ*.war
ไฟล์ใดที่มีการเปลี่ยนแปลง (แทนที่ / สร้าง) ในช่วง x นาทีสุดท้าย
มีเครื่องมือใน Linux เพื่อช่วยในเรื่องนี้หรือไม่?
คำตอบ:
Strace (ตามที่ระบุไว้ข้างต้น) เป็นวิธีหนึ่งในการตรวจสอบการทำงานของซอฟต์แวร์ที่ใช้งานที่ระบุ
คำสั่งบางอย่างเช่นwatch find dir/ -mmin 1
อาจช่วยตรวจสอบการเปลี่ยนแปลงของนาทีที่ผ่านมาในบางไดเรกทอรี
inotify-toolsอาจเป็นเครื่องมือการค้าอีกอย่างหนึ่งทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังมองหา
ตัวอย่างเช่นinotifywait -mr dir/
ตรวจสอบการเปลี่ยนแปลงในไดเรกทอรีที่กำหนดและให้ข้อเสนอแนะแก่คุณเกี่ยวกับแอปพลิเคชันที่พยายามเปิด / อ่าน / เขียน / ปิดไฟล์ทันที อย่างไรก็ตาม inotify ไม่ได้ให้คำติชมเกี่ยวกับแอปพลิเคชันหรือกระบวนการที่กำลังเข้าถึงไฟล์ - ซึ่งเป็นสิ่งที่ strace ทำได้
โปรดทราบว่าการตรวจสอบระดับระบบมักใช้อย่าง จำกัด สำหรับซอฟต์แวร์จาวาที่ทำงานอยู่ในสภาพแวดล้อมของแอพพลิเคชันคอนเทนเนอร์เนื่องจากคุณจะเห็นเฉพาะคอนเทนเนอร์ (เช่น Tomcat) แต่ไม่ใช่แอปพลิเคชันจริง (เช่น. war) ที่มีปฏิสัมพันธ์กับระบบ
คุณสามารถรับข้อมูลเกี่ยวกับไฟล์ที่เข้าถึงได้โดยกระบวนการโดยlsof :
lsof -n -p `pidof your_app`
และข้อรองคุณสามารถรับ pid ของกระบวนการที่เขียน / อ่านไฟล์บางไฟล์:
lsof -n -t file
คุณสามารถใช้strace
เพื่อตรวจสอบการเรียกระบบทั้งหมดของกระบวนการซึ่งรวมถึงการเข้าถึงไฟล์ทั้งหมด
เมื่อเริ่มต้นโปรแกรม:
$ strace ./myserver
คุณยังสามารถแนบ strace กับกระบวนการทำงานผ่าน PID:
$ ps aux | grep myserver
me 1859 0.0 0.0 25288 424 ? Ss Sep02 0:00 myserver
$ strace -p 1859
watch find dir/ -mmin 1
ไม่ทำงานสำหรับฉันสิ่งที่เป็นเพียงการคัดลอกและความแตกต่าง:
cp -r dir /tmp/olddir
# initialize/whatever
diff -r dir /tmp/olddir
มันค่อนข้างใช้ทรัพยากรมาก แต่มันแสดงการเปลี่ยนแปลงทั้งหมดระหว่างสแน็ปช็อตและdiff
เวลา