tidak dapat membuat 'nama file' file biasa: File ada


23

Saya menerima pesan kesalahan aneh ini di salah satu skrip build saya - cpgagal, mengembalikan kesalahan "File ada". Saya bahkan sudah mencoba menggunakan cp -f, yang seharusnya menimpa file jika ada, tetapi kesalahan masih muncul. Berlari cpuntuk menimpa file yang ada berfungsi dengan sempurna ketika saya melakukannya secara manual. Apa yang bisa menyebabkan kesalahan ini?

Jawaban:


25

Ini ternyata disebabkan oleh kondisi balapan. cpmemeriksa apakah file tujuan sudah ada, dan jika tidak - menimpanya. Masalahnya terjadi karena cpperintah ini dijalankan dua kali secara paralel, yang menyebabkan file tersebut terkadang muncul setelah memeriksa apakah ada, tetapi sebelum upaya untuk membuat file. The straceOutput terlihat seperti ini:

# Command was "cp a b"
stat("b", 0x7fff89510620)               = -1 ENOENT (No such file or directory)
stat("a", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("b", 0x7fff895103a0)               = -1 ENOENT (No such file or directory)
# File b will be created at this point in time
open("a", O_RDONLY)                     = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
open("b", O_WRONLY|O_CREAT|O_EXCL, 0644) = -1 EEXIST (File exists)

Berikut beberapa kode bash yang digunakan untuk menangkap ini:

#!/bin/bash

touch a

f() {
  while true; do
    rm -f b
    strace -o /tmp/cp${BASHPID}.trace cp a b || break
  done
}

cleanup() {
  kill -9 %1 %2
}

f &
f &

trap cleanup exit

wait

Kesalahan yang sama ini dapat terjadi dengan mkdir -patau tindakan lain yang mencoba menimpa file. Menggunakan flockdapat membantu menghindari kondisi balapan dalam kasus seperti ini.


Saya mengalami situasi yang sama persis ini. Saya memilih untuk menanganinya melalui ||operator. Semacam mencoba / menangkap poorman. Yaitu cp ... || echo "skip copying due to other thread",. Atau sesuatu yang serupa ...
icfantv

Saya mengalami masalah ini saat menjalankan satucp
ZhaoGang

Berlari ke masalah yang sama. Bagaimana Anda men-debug-nya?
CIsForCookies

Ada yang gagal cp.
lutzky
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.