Bir uyarı gönderiminde bulunmaya çalıştığım bir uyarı betiğidir, böylece bir uyarı gönderildiyse, son bir saat geçmesini istiyorum , başka bir uyarı göndermemek. Şimdi her dakika durumu kontrol eden bir cron görevim var çünkü durum karşılandığında hızlı bir şekilde uyarılmam gerekiyor ama konuyu kontrol altında tutana kadar her bir mahalleyi e-posta almam gerekmiyor. Bunu başarmak için bash'taki zamanı karşılaştırmanın en iyi yolu nedir?Bash'de Zaman Damgası Karşılaştırmasının Gerçekleştirilmesi İçin En İyi Yol nedir
cevap
en kolay mankenin modifikasyonu zamanları gibi zaman damgaları saklamaktır Dosyalar. GNU touch
ve date
komutları bu zamanları ayarlayabilir/alabilir ve tarih hesaplamaları yapabilir. Bash, bir dosyanın (-nt
) 'dan daha yeni olup olmadığını (-ot
) diğerinden daha yeni olup olmadığını kontrol etmek için testlere sahiptir. Geçen bildirim bir saat önce fazla oldu Örneğin
, sadece bir bildirim göndermek için:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
Kullanımı "test":
if test file1 -nt file2; then
# file1 is newer than file2
fi
DÜZENLEME: Bir etkinlik, size daha sonra "test" kullanarak karşılaştırabilirsiniz bir dosya oluşturmak için "dokunma" kullanabilirsiniz meydana geldiği öğrenmek istiyorsanız.
sayesinde, -Nt bit farkında değildi. Uyarı ilk kez tetiklendiğinde bir dosya oluşturabilir ve durum kurtarıldığında silinebilir (Bu durumda varoluşumu kontrol edebilirim). 'En azından bir saat sonra uyarıyı tekrar attıysam' nasıl uygulayabilirim? – Ichorus
@Bruno'nun buna cevap verdiğini düşünüyorum. – JesperE
İki kez standart bir formata dönüştürmek ve bunları çıkarmak için tarih komutunu kullanın. Muhtemelen sonra bir şey gibi yapmak bir dotfile önceki yürütme zamanı saklamak istersiniz: (. Teşekkürler Steve)
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
farkla
Neden çağlardan beri sadece saniye kullanmıyorsunuz (% s)? Bir saatte 3600 saniye. –
Çünkü bu seçeneğin var olduğunu düşünmüş olsam da, ona bakmaya devam ettim ... –
Bu yöntemi beğendim, daha yeni sürüm bash'a bağlı değil. Ve meşgul kutusu bunu yapabilirdi. –
- 1. WebGL'yi öğrenmek için en iyi yol nedir?
- 2. En yakın zaman damgası
- 3. en iyi yol?
- 4. PHP'de kimlik doğrulama için en iyi yol
- 5. Javascript kodunun izlenmesi için en iyi yol
- 6. En iyi yol C#
- 7. Görüntüleri belleğe yüklemek için en iyi yol?
- 8. Raylar dağıtımı - en iyi yol
- 9. unix zaman damgası için alan türü
- 10. WCF İstemcisi proxy'si için en iyi yol
- 11. Silverlight'taki FlowDocument için en iyi yedek nedir?
- 12. Uygulamalar arasındaki iletişim için en iyi yol Bir uygulama için
- 13. XML Şeması'nda Zaman Damgası
- 14. Castle Windsor: Bir bileşen kaydedildiğinde en iyi yol nedir?
- 15. CMake için en iyi ücretsiz referans nedir?
- 16. java için en iyi html ayrıştırıcısı nedir?
- 17. Mongoid'i öğrenmek için en iyi öğretici nedir?
- 18. En iyi zaman uyumsuz yöntem
- 19. Raylar - sadece üretimde kodu görüntülemek için en iyi yol?
- 20. Birden çok dizi üzerinde yineleme için en iyi yol?
- 21. Yay kapanmasını bir fasülyeden zorlamak için en iyi yol?
- 22. Perl'de zaman matematiği ile baş etmenin en iyi yolu nedir?
- 23. laravel migrasyon yabancı anahtarı eklemek için en iyi yol
- 24. En iyi javascript obfuscator nedir?
- 25. Unix Zaman Damgası Python
- 26. Handlerthread'i durdurmak için bu en iyi yol mu?
- 27. Logrus zaman damgası biçimlendirme
- 28. Kabukta temel istatistikler yapmak için en iyi yol?
- 29. jQuery.ajax() - Zaman aşımları en iyi nasıl yapılır?
- 30. Jmeter'da en iyi yolu bulmanın en iyi yolu nedir?
Not: -nt, zaman damgaları arasında en az 1 saniyelik fark olmadıkça çalışmıyor. Bir dosyanın "yeni" olup olmadığını test etmek için "dokunduğum" bir geçici dosyayla karşılaştırdım. Bu -nt sorunu için orada bir "uyku 1" ekledi. Bu karşılaştırma aslında gitmek için en kolay yol gibi görünüyor, ancak uyku önerimi beğenmezseniz, ihtiyaçlarınıza bağlı olarak daha hassas bir tarih/zaman karşılaştırması isteyebilirsiniz. – BuvinJ