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

  • LAHWF

    LAHWF

    5 Kasım 2009
  • martin shervington

    martin sherv

    7 EKİM 2011
  • taliajoy18

    taliajoy18

    12 Temmuz 2011