Bir yakut komut dosyasının zaten çalışıp çalışmadığını ve sonra uygun şekilde işleyip işlemediğini anlamanın kolay bir yolu var mı? Örneğin: really_long_script.rb adında bir komut dosyası var. Her 5 dakikada bir kaçmaya cüret ettim. Çalışırken, önceki çalışmanın hala devam edip etmediğini görmek ve ikinci komut dosyasının yürütülmesini durdurmak istiyorum. Herhangi bir fikir? Bash olarakBir yakut komut dosyasının çalışıyor olup olmadığını belirleme
cevap
ps o ve yarış koşullarına muhtemelen açık yapmanın gerçekten kötü bir yoldur.
Geleneksel Unix/Linux yolu, PID'yi bir dosyaya (tipik olarak/var/run) yazıp, dosyanın başlangıçta olup olmadığını kontrol etmektir.
örn. pidfile /var/run/myscript.pid adresinde bulunur ve programı çalıştırmadan önce var olup olmadığını kontrol edersiniz. Dosya ve sembolik linkleri açmak için O_EXCL (kilitleme hariç) kullanarak yarış koşullarını önlemek için birkaç hile vardır.
Ancak, olasılıkla, dosya sistemindeki atomik işlemleri kullanarak yarış koşullarından kaçınmak için kod yazmayı denemelisiniz.
Tekerleği yeniden keşfetmekten, kendi senaryo kendi kendini temizlemeye olmadan ölürse, yayınlanmaz böylece Muhtemelen de, süreç aslında çalıştığını kontrol etmelidir http://rubyforge.org/projects/pidify/
:
if ps aux | grep really_long_script.rb | grep -vq grep
then
echo Script already running
else
ruby really_long_script.rb
fi
bakmak isteyebilirsiniz kaydetmek için Bir dahaki sefere sadece /var/run/foo.pid'in varlığını ve çıktısını kontrol etmek yerine.
Highlander
Açıklama
ana senaryonun yalnızca bir örneğini çalıştıran sağlayan bir mücevher. Kısaca, sadece bir tane olabilir.
require 'highlander' # This should be the -first- thing in your code.
# Your code here
arada
Kurulum
gem install highlander
Özet, geri komut satırında ...
# First attempt, works. Assume it's running in the background.
ruby your_script.rb
# Second attempt while the first instance is still running, fails.
ruby your_script.rb # => RuntimeError
Notlar Basitçe highlander mücevher gerektiren
tha sağlar t Bu komut dosyasının yalnızca bir örneği yeniden başlatılamaz. Yeniden başlatmayı denerseniz bir RuntimeError yükseltir.- 1. NSString boş olup olmadığını belirleme
- 2. Bir sınıf başvurulan olup olmadığını belirleme C#
- 3. ruby: komut dosyasının 3. yeniden deneme olup olmadığını nasıl öğrenebilirim?
- 4. Javascript onload olayı - komut dosyasının yüklü olup olmadığını nasıl anlayacaksınız?
- 5. Dizi anahtar değerinin boş olup olmadığını belirleme
- 6. Bağlantı noktasının kullanımda olup olmadığını belirleme?
- 7. Django - model sınıfının soyut olup olmadığını belirleme
- 8. socket.io/node.js sunucunun kapalı olup olmadığını belirleme
- 9. Magento modülünün etkin olup olmadığını belirleme
- 10. Pencere window.showModalDialog tarafından açılmış olup olmadığını belirleme
- 11. JavaScript değerinin "tamsayı" olup olmadığını belirleme
- 12. YouTube videosunun geniş ekran olup olmadığını belirleme
- 13. Eylem çubuğu bölünmüş olup olmadığını belirleme
- 14. Sınırlarda Lat/Lng olup olmadığını belirleme
- 15. Nesnenin tam sayı olup olmadığını belirleme
- 16. Python'da karakter kümesinin var olup olmadığını belirleme
- 17. İki dizenin Javascript'te benzer olup olmadığını belirleme?
- 18. Açı 180 dereceden fazla olup olmadığını belirleme
- 19. Oynatıcının sunucu veya istemci olup olmadığını belirleme
- 20. Bir bayt [] 'ın bir pdf dosyası olup olmadığını belirleme
- 21. Güvenilmeyen bir ana bilgisayardan komut dosyasının karma değerini belirleme
- 22. Bir FormData dosyasının boş olup olmadığını nasıl kontrol ederim?
- 23. Bir tablo görünümü hücresinin görünür olup olmadığını belirleme
- 24. Bir liste görünüm kutusunda seçili olup olmadığını belirleme
- 25. Bir e-posta adresinin 'public' olup olmadığını belirleme
- 26. Dosyanın perl içinde bir PDF olup olmadığını belirleme
- 27. Bir php dizgesinde geçen sürenin olup olmadığını belirleme
- 28. Bir fare konumunun tarayıcının kenarlarına yakın olup olmadığını belirleme
- 29. CSS özniteliğinin belirli bir değer olup olmadığını belirleme?
- 30. Bir tarih/saatin mevcut olup olmadığını belirleme yolu var mı?