perintah cp seharusnya tidak gagal

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.


person Raghav    schedule 26.09.2012    source sumber


Jawaban (3)


Lihat apakah Anda bisa membuat ini berhasil untuk Anda. Jadikan "file" sebagai tautan simbolis ke dua file lainnya, file1 dan file2. Gunakan perintah "ln -fs file1 file" untuk membuat tautan ini. Ketika seseorang membuka "file" OS akan mengarahkan Anda ke "file1" Ketika Anda ingin membuat cadangan, jalankan perintah "ln -fs file2 file" dan sekarang file akan menunjuk ke file2. Anda kemudian dapat melakukan apa pun yang ingin Anda lakukan pada file1. Balikkan proses untuk kembali ke file1.

person Rod Meyer    schedule 28.09.2012

Anda dapat menggunakan tautan keras untuk melakukan bagian pencadangan:

generate ${File}.new
ln -f ${File} ${File}.backup
mv ${File}.new ${File}

Setelah ln, akan ada dua nama file untuk file lama. Setelah mv, hanya nama file .backup yang akan merujuk ke file lama, ${File} akan merujuk ke file baru.

person ninjalj    schedule 28.09.2012

Saya tidak tahu tentang sistem Anda tetapi sistem saya mengatakan cp -f akan menghapus file tersebut jika tidak dapat segera menimpanya. (Ada juga opsi untuk mencadangkan file secara otomatis, tetapi periksa manual sistem Anda.)

person Neil    schedule 26.09.2012
comment
Saya tidak mampu menghapus file sebelum menimpanya... dalam hal ini, proses yang saat ini mengunci file akan gagal. - person Raghav; 26.09.2012