Saya mencoba menulis artikel, di mana saya mencoba melakukan pertukaran file antara ${File} dan ${File}.new
Kode aslinya seperti ini -
generate ${File}.new
mv ${File} ${File}.backup
mv ${File}.new ${File}
Gagal pada beberapa kasus, ketika pada saat yang sama mv pertama telah selesai, namun mv kedua belum selesai, mungkin ada permintaan untuk ${File}. Dan permintaan itu ditolak karena file tersebut tidak tersedia dengan nama itu. Jarang terjadi, namun demikian, terjadi (terjadi kemarin untuk pertama kalinya dalam 6 minggu)
Untuk menghindarinya, saya berpikir untuk mengganti mv
dengan cp
dan oleh karena itu, saya mencoba membuat sesuatu seperti ini -
generate ${File}.new
cp ${File} ${File}.backup
cp ${File}.new ${File}
rm ${File}.new
Sekarang, tantangan saya adalah, pada saat saya menulis ke ${File}, jika ada proses yang membacanya pada saat itu, salinannya mungkin gagal, mengatakan bahwa ia tidak dapat memperoleh kunci pada objek.
Apakah ketakutan saya akan kegagalan benar adanya?
Saya ingin memberitahu program untuk menunggu beberapa detik/menit dan kemudian mencoba lagi, bukannya gagal.
Saya menggunakan AIX 6.1 dengan korn shell.