Cron ile saat dilimi sorunu


11

Cron işlerim sunucu saatine göre bir saat sonra hesaplanıyor. Neler olduğunu anlamıyorum.

Yapılandırmam şudur:

Sunucu zamanı :

Europe/Paris

/ Etc / default / cron içinde aşağıdaki satırı ekledim:

TZ="Europe/Paris"

Buna rağmen, cron işi sunucu saatinden bir saat sonra başlatılır. Gerçekten zor, cron talimat "tarih" oynamak için sorarsanız, sunucu tarih (iyi bir!) Verir olmasıdır.

Bu sorunun nasıl çözüleceği hakkında hiçbir fikrim yok; Forumlarda biraz okuma yaptım ama ilginç bir şey bulamadım.

Ne düşünüyorsun ?


4
Yani cron işleri UTC'de planlanıyor. Vixie cron man sayfası, "Eğer arka plan programı varsa, saat dilimi için / etc / timezone tanımını kullanır." İçinde ne var /etc/timezone? Sürecin başlamasından /etc/timezonedaha yakın zamanda değişiklik yaptınız mı cron? Denedin /etc/init.d/cron restartmi
Keith Thompson

3
/ etc / timezone, /etc/init.d/cron yeniden başlatılmadan yakın zamanda değiştirildi. Yeniden başlatmayı deneyeceğim.
Guillaume Lebourgeois

Yanıtlar:


16

(Yorumumu bir cevap olarak kopyalamak, çünkü çözüm olduğu ortaya çıktı; doğru tahmin ettim.)

Bu yüzden cron işleri UTC'de planlanıyor (UTC'den Europe/Parisbir saat uzaklıkta).

Vixie cron man sayfası diyor ki:

Daemon, varsa, saat dilimi için / etc / timezone tanımını kullanacaktır.

İçinde ne var /etc/timezone? /etc/timezoneCron işleminin başlamasından daha yakın zamanda değişiklik yaptınız mı ? Denedin mi

/etc/init.d/cron restart

?


3

Fedora gibi bazı dağıtımlar CRON_TZ=, varsayılan saat diliminizi geçersiz kılacak şekilde ayarlayabileceğiniz bir mekanizma sağlar .

Fedora kalkışlı man 5 crontab

CRON_TZ değişkeni, cron tablosu için belirli bir saat dilimini belirtir. Kullanıcı tabloya belirtilen saat dilimine göre bir saat girmelidir. Günlük dosyasına yazmak için kullanılan süre, arka plan programının çalıştığı yerel saat diliminden alınır.

Bunun gibi bir şey:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash

1

Wikipedia diyor

Çoğu cron uygulaması, cron arka plan programının kendisinin çalıştığı sistem saat dilimi ayarındaki crontab girişlerini basitçe yorumlar. Büyük bir çok kullanıcılı makinenin birkaç saat diliminde kullanıcıları varsa, özellikle sistem varsayılan saat dilimi kafa karıştırıcı olabilecek DST'yi içeriyorsa, bu bir anlaşmazlık kaynağı olabilir. Bu nedenle, bir cron uygulaması, kullanıcı crontabs'ındaki herhangi bir "TZ =" ortam değişkeni ayar hattını özel olarak ele alabilir ve sonraki crontab girişlerini bu zaman dilimine göre yorumlayabilir

Belki de giriş kimliğinizde sistem TZ ayarından farklı bir TZ ayarı vardır?


1

İhtiyacım olan cron'u yeniden başlatmak benim için buydu

/etc/init.d/crond restart (crond not cron)

0

Sadece bunu Ubuntu 14/16'da anladım. Benim için mükemmel çalıştı.

Adımlar (sudo zımni):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone

Nereden cronyeniden başlatılır?
DavidPostill

Cron'u yeniden başlatmam gerekmiyordu.
Varun Chandak
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.