Sonbahar saati değişim saatlerinde Planlanan İşler


12

Diğer insanların bu senaryo ile nasıl başa çıktıklarını merak ediyorum.

1: 30'da çalışmak üzere planlanmış bir işiniz varsa ne olur? Sonbaharda, zaman değiştiğinde, 1:00:00 ila 1:59:59 saatleri kendini tekrarlar ve böylece iş iki kez çalışır.

Windows Görev Zamanlayıcı, SQL Aracısı veya başka bir zamanlama aracı olabilir. Bu araçların çoğu UTC zamanına değil, makine zamanına dayalı gibi görünmektedir. İşi her gece UTC saatinde çalıştırmayı söyleseydim, yinelenen saat sorununa sahip olmazdım.


1
Daha güncel bir şey bulamadım ama umarım bu konuya biraz ışık tutar - support.microsoft.com/kb/325413
joeqwerty

Bu mükemmel, neden cevap yazmıyorsunuz?
NealWalters

Size gerçekten bir çözüm sunmuyor (en azından onu okumaktan ayırt edebileceğimden değil) ama konuyu anlamaya yardımcı olacağını düşündüm. Yorum olarak bırakmaktan mutluluk duyuyorum.
joeqwerty

Yanıtlar:


10

Zaman dilimlerini ve gün ışığından yararlanma süresini de dikkate alarak gelecekteki görevlerin yerel saate göre uygun şekilde planlanması çok karmaşık bir konudur. Daha önce burada ve burada Stack Overflow üzerine bir programlama perspektifinden yazmıştım .

Programlama dışı bir perspektiften özetleyeceğim:

  • Yineleme kalıplarınızı UTC'ye değil yerel saate göre tanımlayın . Örneğin, sizi her gün sabah 8: 00'da uyandırmak için günlük bir çalar saat ayarlarsanız, gün ışığından yararlanma saati geçişinden bir saat erken veya bir saat geç uyanmak istemezsiniz. ABD Pasifik saat dilimindeysem, 16:00 UTC için zamanlama yapamıyorum, çünkü geçişten sonra aynı 8:00 AM yerel saatini tutmak için 3:00 PM UTC'ye geçmek zorunda kalacak.

  • "Yerel" zamanın temsil ettiği saat dilimini tanımlayın. Sunucunun yerel saat diliminin son kullanıcı için önemli olan aynı saat dilimi olduğunu varsaymayın.

  • Proje Eğer ateşe olayı istedikleri her bir oluşumda bir UTC tarih ve saate yerel saat.

    • Hemen hemen her zaman bir sonraki olay için yapacaksınız, böylece çalıştırmak için gerçek anı belirlemek için UTC saatini kullanabilirsiniz.

    • Gelen bazı durumlarda, ayrıca bu tür önümüzdeki 5 olaylar, ya da bir sonraki yıl için geçtiği tüm olarak önümüzdeki birkaç (veya birçok) örneklerini yansıtmak isteyebilir. (Bu bölüm, uygulamanın gereksinimlerine oldukça özeldir.)

  • Gün ışığından yararlanma saati geçişi sırasında meydana gelen olaylar için ne yapılacağına dair (sabit veya yapılandırılabilir) bir stratejiniz olsun :

    • "Yay ileri" geçişi için, oluşumun bulunmayabileceği yerel saat eksik bir boşluk vardır. Örneğin, ABD Pasifik Saati'nde yerel saatle 02: 00'da çalışması planlanan günlük bir görev 9 Mart 2014'te mevcut olmayacaktır. Çoğu durumda bu süreyi tasarruf tutarıyla (genellikle 1 saat) ilerletmek istersiniz. ), o gün 3: 00'da çalışır, ancak bir sonraki örnekte 2: 00'da tekrar çalışmaya başlar. (Bununla birlikte, bunun için farklı bir strateji istemeniz tamamen mümkündür.)

    • "Geri çekilme" geçişi için, oluşumun iki kez var olabileceği yinelenen yerel saatin çakışması vardır . Örneğin, ABD Pasifik Saati'nde, 1: 00'da çalışması planlanan günlük bir görev, 2 Kasım 2014'te çalıştırılabilecek iki olası süreye sahip olacaktır. Çoğu durumda, 1'in ilk tekrarında çalışmak isteyeceksiniz. : 00:00 PDT ve aynı tarihin 1:00 AM PST sonraki oluşumunu atlayın. (Ama yine, sen olabilir böyle ikinci bir oluşum üzerinde çalışan ya da her ikisini de çalışan olarak, farklı bir strateji istiyorum. YMMV)

  • Saat dilimi verilerinizi güncellemeniz gerekiyorsa, tüm UTC saatlerini tekrar hesaplamaya hazır olun . IANA / Olson TZDB birden güncellemeleri dışarı koyar her yıl nedeniyle saat dilimi uzaklıklar ve yaz saati kuralları hakkında Dünya değişikliği akıllarını her zaman hükümetleri. İleride kuralların değişmeyeceğini belirli bir süre boyunca kabul edemezsiniz .

    • Saat dilimi verileri sürümlerinin duyuruları için abone olduğunuzdan emin olun ve bunları sistemlerinize ve / veya uygulamalarınıza uygulamak için bir işlem gerçekleştirin.

    • Geleneksel bir kurumsal ortamda, bu BT Operasyonları personelinin sorumluluğunda olmalıdır.

    • Ortamınıza bağlı olarak, bu verileri tzdatalinux paket güncellemeleri, Java JRE veya tzupdater veya herhangi bir sayıda başka kanal aracılığıyla alabilirsiniz. Bazen ortama özgüdür ve bazen PHP için timezonedb PECL paketi ve diğerleri gibi programlama platformuna özgüdür .

    • Microsoft'un kendi saat dilimi verileri vardır. Windows'ta .NET'ten kullanıyorsanız TimeZoneInfo(örneğin), bu verileri kullanıyorsunuz. Güncellemeler buradan gelir ve ayrıca Windows Update aracılığıyla otomatik olarak dışarı itilir, bu yüzden bunları ne zaman yeniden hesaplamanız gerektiğini / bilmeniz gerektiğini bilmeniz gerekir.

  • Anlaşılan o her ile, orada olduğu hala UTC ile sadece zamanlama verecek bir senaryo ve bunun içindir MUTLAK gelecekteki olayların. Örnekler:

    • Her X saatte veya X dakikada bir çalışan bir iş.

    • Gündoğumu başlangıç ​​ve bitiş saatleri veya diğer astronomik fenomen.

    • Önceden ayarlanmış bir zamanda hassas bilgileri başka bir tarafa iletirken olduğu gibi zamana duyarlı bir güvenlik penceresi.


Windows Görev Zamanlayıcı

Windows mutlaka doğru şeyi yapmıyor. Tetiği nasıl tanımladığınıza dikkat edin:

Windows Görev Zamanlayıcı

"Saat dilimleri arasında senkronize et" etiketli kutuyu işaretlediğinizde, görev yalnızca UTC tarafından zamanlanır. (Tüm saatler hala yerel saat olarak gösterilir, ancak UTC olarak saklanır .) Bu yüzden daha önce "mutlak" olay dediğim şey budur.

Bu kutuyu işaretlemeden bıraktığınızda, kodun çalıştığı bilgisayarın yerel saat dilimini kullanır. Size saat dilimini belirtmek için herhangi bir seçenek sunmaz, bu nedenle IMHO çok iyi bir uygulama değildir.

DST davranışından tam olarak emin değilim, ama deneyeceğim ve size bu konuda geri döneceğim. Muhtemelen yukarıda tarif ettiğim şeyi yapıyor, ama mutlaka değil.


SQL Aracısı

SQL Agent zamanlayıcı daha da kötüdür, çünkü sadece yerel sunucu zamanını kullanmanıza izin verir. Yine, hiçbir saat dilimi belirtilemez ve UTC de belirtemezsiniz.

Bu edilmiş istenen ancak kabul edilmedi.


Sonuç olarak, SQL Agent ve Windows Görev Zamanlayıcı özel araçlarıyla, her seferinde değişiklik yapmak için manuel değişiklikleriniz var, değil mi? Veya potansiyel olarak, zamanlayıcıdan çalıştırılan kod UTC saatini tekrar kontrol edebilir, sonra muhtemelen bir gecikme yapabilir (sonbaharda), ancak işin manuel bir değişiklik dışında Baharda çalışmamasını önlemenin hiçbir yolu yoktur. Ya da belki de programı yeniden programlamak için bir betik?
NealWalters

Cevabı Windows Görev Zamanlayıcısı ve SQL Aracısı hakkındaki bilgilerle güncelledim. İkisi de tamamen doğru yapmıyor. Kendi çözümünüzü geliştirmek istiyorsanız, Quartz.net'e bakmak isteyebilirsiniz .
Matt Johnson-Pint

Kısa vadede, görevlerinizi belirli UTC saatlerinde çalışacak şekilde tanımlamak için bu kutuyu işaretli olarak Windows Görev Zamanlayıcı'yı kullanabilirsiniz. Ama muhtemelen bunların programla kendi kodunuzdan oluşturduğunuz tek seferlik görevler olmasını istersiniz, böylece gerisini dikkate alabilirsiniz.
Matt Johnson-Pint

Başka bir harika cevap!
NealWalters

1

Genel olarak umursamayarak.

"Peki ya görev iki kez çalışırsa?"

Genel olarak, önemli olmayacak, bu yüzden hiçbir şey yapmanıza gerek yok. Önemli olursa, en basit çözüm işi yaz saati uygulamasından etkilenen saatin dışına taşımaktır.


Umurumda olmasaydım, sormazdım. Bazıları önemli, bazıları önemli değil. Saat 2: 00'de, dosyayı ayıklayan ve satıcılarımıza gönderen işlerimiz var. Saat 2: 00'de tekrarlanacağını sanmıyorum. Sadece ek sigorta için 2:05'e geçeceğiz. Yedeklerimiz, akıllı dizin işlerimiz vs. var ama neyse ki daha sonralar.
NealWalters

1
@NealWalters Bence bu adil bir nokta, umutsuz için adil olmak: Eğer bir görev iki kez çalışırsa önemli değil, neden endişeleniyorsun. Seni bilmiyorum ama endişelenmem gereken şeyler hakkında endişelenmeden endişelenmen gereken çok şey var. O takdirde yapar olsun o zaman zaten bazı aklı denetimi yapması gerektiğini kodlama gerekir zaten . Bunu söyledikten sonra, saatlerin tam olarak geri dönmesi için bir şeyler planlamaktan kaçınmak kesinlikle iyi bir fikir - bu sadece sorun istiyor.
Rob Moir

Bu benim seçimim değil, sabahın o saatinde havaalanlarına ayıklama dosyaları gönderiyoruz ve o zaman dosyayı istedikleri zaman. BizTalk, mesaj tabanlı bir sistem kullanıyoruz, bunun gibi şeyleri iki kere kontrol etmek çok daha zor. SQL zamanlayıcı ve Windows görev zamanlayıcısının günlük UTC saatine izin vermemesi biraz hayal kırıklığı yaratıyor.
NealWalters

1

Belirttiğiniz gibi, 01:00 ile 02:00 arasındaki saat DST'nin sonunda tekrarlanır; ters değişiklik meydana geldiğinde (DST'nin başlangıcı) 02:00 ile 03:00 arasındaki zamanlar gerçekleşmez (ve işiniz çalışmaz). En iyi seçenekleriniz

  • iş programını UTC olarak çalıştır
  • işi değişimin dışında bir zamanda yürütmek (12:59 veya 03:00)
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.