SORU
4 EKİM 2008, CUMARTESİ


Nasıl aynı anda çalışan bir senaryoyu önlemek için?

Benim komut dosyası bir kereden fazla zaman kalmasını önlemek istiyorum.

Benim geçerli bir yaklaşımdır

  • semafor bir dosya çalışan sürecin pıd içeren oluşturun
  • eğer benim kimliği işlem dosyasını oku, exit (hiç belli olmaz...) değil
  • bu işlem sonunda, dosyayı silin

Asılı sürecini önlemek için, Eğer hala çalışıyorsa periyodik olarak onun büyük sonra dosya Maksimum çalışma süresi izin verilen kontrol etmek için bir cron işi kurmak ve süreci öldürür.

Yanlış bir işlem öldürüyorum böyle bir risk var mı?

Daha iyi bir şekilde gerçekleştirmek için bir bütün olarak bu var mı?

CEVAP
4 EKİM 2008, CUMARTESİ


flock(1) dosya tanımlayıcısı özel kapsamlı kilit bir hale getirmek için kullanın. Bu şekilde senaryoyu farklı bölümlerini senkronize edebilirsiniz.

#!/bin/bash

(
  # Wait for lock on /var/lock/.myscript.exclusivelock (fd 200) for 10 seconds
  flock -x -w 10 200 || exit 1

  # Do stuff

) 200>/var/lock/.myscript.exclusivelock

Bu ( ) kod arasında bir defada bir süreç tarafından çalıştırılan ve süreci çok uzun bir kilit beklemez sağlar.

Uyarı: Bu özel komut util-linux bir parçasıdır. Eğer bir işletim sistemi Linux dışında çalıştırırsanız, olabilir veya olmayabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • MVLV28

    MVLV28

    17 Mart 2008