Yanıtlar:
Manuel sayfa flock(2)
uzun bir süredir güncelliğini yitirmiş, ancak o zamandan beri şu şekilde güncellendi (benimki vurgulandı):
Linux 2.6.12'den bu yana, NFS istemcileri flock () kilitlerini tüm dosyada bayt aralığı kilitleri olarak taklit ederek destekler. Bu, fcntl (2) ve flock () kilitlerinin NFS üzerinden birbirleriyle etkileşime girdiği anlamına gelir. Linux 2.6.37'den bu yana çekirdek, flock () kilitlerinin (ve ayrıca fcntl (2) bayt bölge kilitlerinin) yerel olarak işlemesine izin veren bir uyumluluk modunu destekler; bkz. nfs (5) içindeki local_lock seçeneğinin tartışılması.
Bu, man-sayfa 4.00'ün yeni sürümünü gösteren http://man7.org/linux/man-pages/man2/flock.2.html resmi man-sayfaları web sitesinden.
Linux 2.6.12, 2005 yılında piyasaya sürüldü.
Bu aslında janneb'in cevabı hakkında bir yorum olması gerekiyordu, ama o zaman itibarım yoktu. Doküman güncellemesi 2014'te oldu: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236
PHP flock()
işlevinin nasıl uygulandığını bilmiyorum , ancak flock()
syscall için bir arayüz olduğunu varsayarsak , o zaman NFS'nin her yerinde çalışmaz. Gönderen flock()
man:
flock (2) dosyaları NFS üzerinden kilitlemez. Bunun yerine fcntl (2) kullanın: yeterince yeni bir Linux sürümü ve kilitlemeyi destekleyen bir sunucu verildiğinde NFS üzerinde çalışır.
Ve elbette, bir man sayfasının söylediği her şey, ne kadar modası geçmiş olursa olsun, nihai gerçektir.
flock()
PHP de dahil olmak üzere Linux NFS'de gayet iyi çalışıyor. Yoğun olarak kullanıyoruz ve istendiği gibi çalıştığını doğrulamak için kapsamlı bir şekilde test ettik. İstemci ve sunucuda gerekli tüm hizmetleri çalıştırıp çalıştırmadığınızı kontrol edin. "Portmapper" ve "rpc.statd" ifadelerini arayın. Çalışmıyorsa, hangi init betiğinin dağıtımınızda onları başlattığını bulmanız gerekir. Debian tabanlı dağıtımlarda " /etc/init.d/portmap
" ve " /etc/init.d/nfs-common
".
İstemciden " rpcinfo -u $NFSSERVER status
" çalıştırın ve yanıt alıp almadığınızı görün. Benim kurulum sonuç olarak "program 100024 sürüm 1 hazır ve bekliyor" olsun.
Oh, ayrıca, hem istemci hem de sunucu birbirleri için güvenilir ana bilgisayar adı girişlerine sahip değilse, bazı durumlarda NFS ve statd'nin üzülebileceğini unutmayın. /etc/hosts
Her iki makinede iki kez kontrol edin .
Sadece kendime cevap vermek istedim. Çözüm burada bulunabilir: http://us3.php.net/manual/en/function.flock.php#82521