নিয়মিত ফাইল 'ফাইলের নাম' তৈরি করতে পারে না: ফাইল বিদ্যমান


23

আমি আমার বিল্ড স্ক্রিপ্টগুলির একটিতে এই অদ্ভুত ত্রুটি বার্তাটি পেয়েছি - cpব্যর্থ হয়েছে, "ফাইল উপস্থিত রয়েছে" ত্রুটিটি ফিরিয়ে আনছে। আমি এমনকি ব্যবহার করার চেষ্টা করেছি cp -f, যা উপস্থিত থাকলে ফাইলটি ওভাররাইট করা উচিত, তবে ত্রুটিটি এখনও প্রদর্শিত হবে। cpবিদ্যমান ফাইলগুলি ওভাররাইট করার জন্য দৌড়ানো যখন আমি ম্যানুয়ালি এটি করি তখন পুরোপুরি কাজ করে। কী কারণে এই ত্রুটি হতে পারে?

উত্তর:


25

এটি একটি রেসের শর্তের কারণে ঘটেছে। cpগন্তব্য ফাইলটি ইতিমধ্যে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে এবং না - এটি ওভাররাইট করে। সমস্যাটি হচ্ছিল কারণ এই cpকমান্ডটি সমান্তরালে দু'বার চালিত হয়েছিল, যার ফলে ফাইলটি কখনও কখনও উপস্থিত রয়েছে কিনা তা যাচাই করার পরে উপস্থিত হয়েছিল, তবে ফাইলটি তৈরির চেষ্টা করার আগে উপস্থিত হয়েছিলstraceআউটপুট ভালো দেখায়:

# 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)

এটি ধরতে এখানে কয়েকটি ব্যাশ কোড ব্যবহৃত হচ্ছে:

#!/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

এই একই ত্রুটি mkdir -pবা অন্য কোনও ক্রিয়াকলাপ ঘটতে পারে যা কোনও ফাইলকে ওভাররাইট করার চেষ্টা করে। ব্যবহার flockএরকম ক্ষেত্রে দৌড়ের পরিস্থিতি এড়াতে সহায়তা করতে পারে।


আমি এই একই একই অবস্থা মধ্যে দৌড়ে। আমি ||অপারেটরের মাধ্যমে এটি পরিচালনা করতে বেছে নিয়েছি । একজন দরিদ্রের চেষ্টা / ধরা বাছাই করুন। অর্থাৎ cp ... || echo "skip copying due to other thread",। বা অনুরূপ কিছু ...
আইকফ্যান্টভি

আমি একক চালানোর সময় এই সমস্যাটি আঘাত করেছিcp
ZhaoGang

একই সমস্যা মধ্যে দৌড়ে। আপনি এটি ডিবাগ কিভাবে?
সিআইসফোরকুকিজ

ব্যর্থতার উপর একটি স্ট্রেস পেয়েছেন cp
lutzky
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.