ฉันกำลังพยายามเขียนงาน โดยที่ฉันกำลังพยายามสลับไฟล์ระหว่าง ${File} และ ${File}.new
รหัสดั้งเดิมเป็นแบบนี้ -
generate ${File}.new
mv ${File} ${File}.backup
mv ${File}.new ${File}
มันล้มเหลวในบางกรณี เมื่อ mv แรกเสร็จสิ้นในเวลาเดียวกัน แต่ mv ที่สองยังไม่เสร็จสิ้น อาจมีคำขอสำหรับ ${File} และคำขอนั้นถูกปฏิเสธเนื่องจากไฟล์ไม่พร้อมใช้งานในชื่อนั้น เกิดขึ้นไม่บ่อยนักแต่ก็เกิดขึ้น (เกิดขึ้นเมื่อวานนี้เป็นครั้งแรกในรอบ 6 สัปดาห์)
เพื่อหลีกเลี่ยงปัญหาดังกล่าว ฉันคิดว่าจะแทนที่ mv
ด้วย cp
ดังนั้นฉันจึงพยายามสร้างสิ่งนี้ -
generate ${File}.new
cp ${File} ${File}.backup
cp ${File}.new ${File}
rm ${File}.new
ตอนนี้ ความท้าทายของฉันคือในขณะที่ฉันกำลังเขียนถึง ${File} หากมีกระบวนการอ่านในขณะนั้น การคัดลอกอาจล้มเหลวโดยบอกว่าไม่สามารถล็อควัตถุได้
ความกลัวความล้มเหลวของฉันมีจริงหรือไม่?
ฉันต้องการบอกให้โปรแกรมรอสองสามวินาที/นาทีแล้วลองอีกครั้งแทนที่จะล้มเหลว
ฉันใช้ AIX 6.1 พร้อมด้วย korn เชลล์