Bir crontab girdisi belirli zaman diliminde çalışması için ayarlanmışsa (örneğin dakikada bir) ve bir sebepten yapılan işlemin belirtilen zaman diliminden fazla sürme ihtimali var ise, aynı komut bir öncekinin bitmesini beklemeden, zamanı geldiğinde tekrar çalışmak isteyeceğinden çakışma gerçekleşebilir.

Örneğin dakikada bir belirtilen kaynaktaki dosyaları işleyip veritabanına atan ve sonrasında kaynak dizini boşaltan bir uygulamamız için zamanlanmış görevimiz var. Diyelim ki gün için de öyle bir dakikaya geldik ki, o an tahmin edemediğimiz, öncesinde kestiremediğimiz şekilde, kaynağımıza fazladan dosyalar geldi. Yani o dakikada çalışan zamanlanmış görevin dosyaları işleyip veritabanına yollama işlemi 1 dakikadan fazla sürecek. Henüz program işlemini bitirmemişken 1. dakikanın sonunda aynı zamanlanmış görev, zamanı geldiği için tekrar çalışacak. Bu da veritabanında aynı verilerin tekrar etmesine sebep olacak.

Bu durumdan sakınmak için flock komutundan yararlanabiliriz.

flock'un basitçe kullanımı şu şekilde
flock -w 5 /herhangi/bir/yol komut
-w 5: eğer komut kullanımdaysa, belirtilen saniye kadar bekle. belirtilen sürede komut boşa çıkar ise, komutunu çalıştır.
/herhangi/bir/yol: Var olan herhangi bir dizinin altına belirleyeceğiniz yol. flock belirttiğiniz yola boş dosya oluşturacak.
komut: Çalıştırmak istediğiniz komut. mv, cp, wget, rm vs gibi.

flock kullanımını bir örnek ile göstereyim.

Görevimiz /dizin/kaynak/ yolu altındaki tüm dosyaları /dizin/hedef/ yoluna kopyalamak olsun.

Bunun için komut satırına şu şekilde bir girdi giriyoruz.

flock -w 0 /space/deneme cp /dizin/kaynak/* /dizin/hedef/

/dizin/kaynak/ yolunun altına büyük dosyalar atarak, kopyalama işlemi gerçekleştiren komutu çalıştırın.
Kopyalama işlemi devam ederken, aynı komutu terminal'de başka bir sekmede girmeyi deneyerek neler olduğunu görebilirsiniz.

Kaynak: http://www.elevatedcode.com/2013/05/07/flock-for-cron-jobs.html