Zamanı karşılaştırmak için iyi bir yöntem mi?


10

Geçerli saati kontrol etmek ve günün uygun zaman değilse çalıştırmak için gerekiyorsa komut dosyası iptal gerekir. Ayrıca, başka biri çalıştırırsa, iptal edilmelidir.

Örneğin: Benim komut sadece 10 PM ve 02:00 (4 saatlik bir pencere) arasında başlatılırsa çalıştırmak gerekir.

Şu anda aşağıdakileri yapıyorum. date +%k%MSabit kodlu sayılarla zaman ayırıp karşılaştırmak

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

Zaman karşılaştırması açısından başka etkili bir yöntem olup olmadığını bilmek isterim shveya bash?


1
İki tarihleri karşılaştırmak gerekirse örneğin MJD veya UNIX zaman onları dönüştürmeye çalışacağız: date +%s.
Eddy_Em

1
@Eddy hayır tarih değil, karşılaştırmam gereken zaman.
mtk

1
Sanırım, saniyeler içinde daha iyi olurdu: currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
Eddy_Em

senaryoyu neden crontab'a koymuyorsunuz? bu şekilde belirli bir zamanda
çalışmasını sağlarsınız

1
Herhangi bir kullanıcı işlemin süresini değiştirebildiğinden, faketimekomut dosyanız çok güvenli değildir. Lockfiles kullanmak muhtemelen daha iyi bir seçenektir.
jofel

Yanıtlar:


6

Bu benim için mükemmel görünüyor. Geliştirilmesi gerektiğini düşündüren nedir?

Her neyse, onu geliştirmenin yolları şunlar olabilir:

  • Çizgi veya pdksh gibi bash'den daha küçük, daha hızlı bir kabuk kullanın.
  • tarih özellikleri yerleşik bir kabuk kullanın zshveyaksh93
  • kullanın gawk(bash'den daha küçük, ancak çizgi değil ama ekstra çataldan kaçınabilir):

Misal:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

tamam iyi. Sadece yaptığım şeyin kaba veya kötü olmadığını doğrulamak istedim. Önerileriniz için teşekkürler.
mtk

4

Harici araçlara izin veriliyorsa, kontrol etmek isteyebilirsiniz dateutils.

"Betik" iniz:

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

Feragatname: Söz konusu aracın yazarıyım.

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.