Bash betiğinde tek bir komut için sürüyü serbest bırak


1

Her gün cron tarafından başlatılan bir senaryo var.

Launch komutu şöyle görünür: flock -n /tmp/mylock.LOCK /path/to/script/script.sh

Komut Dosyası script.shsunucum için yapılandırma dosyalarını günceller ve yeniden başlatmaya çalışır (çalışıyorsa, başlatıyorsa yeniden başlatır). Ancak sorun şu ki, bu sunucu ertesi gün fırlatılmasını /tmp/mylock.LOCKönleyen kilidi tutmaya başladı script.sh.

İşlem sırasında dosya kilidini almadan sunucumu yeniden başlatmak için komut dosyasını bir şekilde çalıştırabilir miyim?

İşletim Sistemi: Ubuntu 12.04


Kod için neden kilit gerekli? Sunucunuzu nasıl (yeniden) başlatırsınız?
user236012

Kilit orada (eğer herhangi bir nedenden dolayı) betiğin yapılandırma güncelleme kısmı sıkışırsa, ikinci örnek başlatılmaz (eşzamanlı iki yapılandırma güncellemesi gerçekten kötüdür). Sunucu sadece bir python programı, ben sadece durup tekrar başlattım (başka bir betiğin yardımıyla).
Anton Guryanov

Yanıtlar:


1

Bir -oseçenek var, flockilk kez man sayfasında kaçırdım .

Man sayfasından alıntı:

-o, --close
     Close  the file descriptor on which the lock is held before exe‐
     cuting command.  This  is  useful  if  command  spawns  a  child
     process which should not be holding the lock.

Yani tam olarak ihtiyacım olanı yapıyor, şimdi sadece ana flocksüreç kilidi tutuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.