आप कोंट्राब के लिए टाइमज़ोन कैसे सेट करते हैं?


63

मैंने एसीपीआई वेकअप की स्थापना की है, इसलिए मेरा लैपटॉप प्रत्येक सुबह एक निश्चित समय पर उठता है। इसके लिए समयक्षेत्र UTC है। मैं UTC का उपयोग करके अपने कॉन्टैब्स को भी सेट करना चाहता हूं ताकि वे वेकअप अलार्म के साथ फिट हों।

आप इसे कैसे करते हो?

मैंने /etc/default/cronशामिल करने के लिए संपादन करने की कोशिश की है :

TZ="UTC"

लेकिन यह काम नहीं करता है। (मैं भी कोशिश की है TZ=UTCऔर TZ="UTC/GMT")

कोई विचार?


1
आपने sudo service cron restartसंपादन के बाद क्या किया ?
रिनजविंड

1
नहीं ... लेकिन मैंने कोशिश की और इससे कोई फर्क नहीं पड़ा।
अल


जवाबों:


44

मुझे ट्रस्टी पर इसी तरह की समस्या थी (14.04)। मशीन के टाइमज़ोन को सेट करके फिर cronसेवा को पुनः आरंभ करके इसे हल किया

  1. sudo dpkg-reconfigure tzdata - क्षेत्र / देश का चयन करने के लिए निर्देशों का पालन करें
  2. sudo service cron restart

1
समय क्षेत्र निर्धारित करने के बाद, आप यह dateसुनिश्चित करने के लिए कमांड लाइन पर टाइप कर सकते हैं कि तारीख आपकी अपेक्षा के अनुसार सही है।
mydoghasworms

मैंने क्रोन को फिर से शुरू किया है, लेकिन यह अभी भी पुराने समयक्षेत्र (यूटीसी) का उपयोग कर रहा है?
ल्यूक फिस्क-लेनन

यह मेरे लिए 18.10 पर मूल रूप से काम किया। ~ $ दिनांक सही समय देता है। उन चमकीले रंग डॉस शैली जीयूआई इंटरफेस प्यार करने के लिए मिल गया! धन्यवाद।
दोपहर

18

इसे हासिल करने का कोई आसान तरीका नहीं है। क्रोन स्थानीय समय का उपयोग करता है। /etc/default/cronऔर TZcrontab में अन्य विशिष्टताओं को निर्दिष्ट करें कि TZक्रोन द्वारा शुरू की गई प्रक्रियाओं के लिए क्या उपयोग किया जाना चाहिए, यह शुरुआती समय को प्रभावित नहीं करता है।

अधिकांश समाधानों को मैंने बीच में एक उपयोगिता को शामिल करते हुए देखा है, इसलिए क्रोन कुछ ऐसा होगा जो तब निर्धारित करेगा जब यूटीसी में किक करना होगा (जैसे यदि आप जानते हैं कि आप केवल डीएसटी परिवर्तनों के बारे में चिंतित हैं, तो इसे 2 घंटे पहले किक करें, वर्तमान की गणना करें समय अंतर है, और यह तो लात बंद। पर एक नज़र डालें at। ऐसा करने के लिए, लोगों को अक्सर उपयोग perlया pythonया इसी तरह की पटकथा भाषाओं)।

यदि आप चाहते हैं तो इसे हैक करने का एक बुरा तरीका है। क्रॉन केवल स्टार्टअप पर सिस्टम से टीबी की जानकारी पढ़ता है। तो अगर यह एक कभी चलने वाला सर्वर है, तो आप बस यूटीसी को टीबी सेट कर सकते हैं, रिबूट कर सकते हैं, और बूट के बाद इसे अपने स्थानीय समय क्षेत्र में सेट कर सकते हैं। आप इसे भी स्क्रिप्ट कर सकते हैं।

एक वैकल्पिक दृष्टिकोण के रूप में, @rebootक्रोन के सिंटैक्स पर भी एक नज़र है , जिसे बूटिंग के बाद स्क्रिप्ट निष्पादित करना चाहिए, जो लगता है कि आपको क्या चाहिए।


14

एक फाइल है जो सिस्टम टाइमज़ोन को नियंत्रित करती है .. मुझे बस एक ही मुद्दा मिला है, यहाँ समाधान है:

यदि आपने मैन्युअल रूप से किसी भी समयक्षेत्र को कॉन्फ़िगर नहीं किया है, तो रनिंग dateको यूटीसी समय प्रदर्शित करना चाहिए।

  • एक बैकअप बनाएं

    sudo cp /etc/localtime /etc/localtime.bkp
    
  • फ़ाइल निकालें:

    sudo rm /etc/localtime
    
  • मैं शिकागो में रहता हूं, (आपको टैब की मदद करने के लिए रास्ता बदलना पड़ सकता है)

    sudo ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
    
  • फिर रिबूट करें। जब आपका सिस्टम स्टार्टअप प्रदर्शन करता है: तारीख

  • अब आपका समयक्षेत्र अभी होना चाहिए, और क्रोन इस पर गौर करेंगे।

FYI करें: TZ वैरिएबल सेट करना एक अस्थायी समाधान है, और कभी-कभी "मास्क" के रूप में कार्य कर सकता है।


1
एक CentOS संगत समाधान (और EC2 अमेज़ॅन लिनक्स) के लिए +1। एक पूर्ण पुनरारंभ एक अच्छा विचार हो सकता है, लेकिन मेरे लिए dateरिबूट किए बिना काम किया, और ओएस sudo service crond restartको बार बार पुनरारंभ करना मेरे क्रोन नौकरी के समय को ठीक करने के लिए पर्याप्त था।
davur

+1 धन्यवाद यह काम कर रहा है।
जिम

13

मार्च 2017 तक, मुझे पता चला कि crond प्रत्येक crontab में CRON_TZ चर का समर्थन करता है।

CRON_TZ चर क्रोन तालिका के लिए विशिष्ट समय क्षेत्र को निर्दिष्ट करता है। उपयोगकर्ता को तालिका में निर्दिष्ट समय क्षेत्र के अनुसार एक समय दर्ज करना चाहिए। लॉग फ़ाइल में लिखने के लिए उपयोग किया जाने वाला समय स्थानीय समय क्षेत्र से लिया जाता है, जहां डेमॉन चल रहा है।

- crontab (5) मैनुअल पेज से बोली

इसने मुझे स्थानीय समय में प्रत्येक क्रोनजॉब को निष्पादित करने का समय निर्दिष्ट करने की अनुमति दी, जो स्वचालित रूप से डीएसटी के लिए जिम्मेदार था, जबकि सर्वर यूटीसी में बना रहा।


मुझे यह लिंक भी मददगार लगा: serverfault.com/questions/848829/… । टाइमजोन विकल्प खोजने के लिए मुझे विकल्प ls /usr/share/zoneinfo/Americaदेखने के लिए प्रवेश की आवश्यकता थी ।
चेवाहागडोग

7

ठीक है, मुझे कुछ समय लगा और यह पता चला कि उबंटू नैटी पर यह कैसे करना है, और यहां बताया गया है कि मैंने इसे कैसे बनाया। अधिक सुरुचिपूर्ण तरीका हो सकता है, लेकिन यह तरीका काम करता है।

सबसे पहले, हमें क्रोन निष्पादन योग्य को एक शेल में लपेटने की आवश्यकता है जो टीबी चर सेट करता है। ऐसे:

cd /usr/sbin
mv cron cron.real

फिर, एक नया / usr / sbin / cron फ़ाइल बनाएं। मैंने विम का उपयोग किया, लेकिन आप अपने इच्छित किसी भी संपादक का उपयोग कर सकते हैं, बस फ़ाइल को इस तरह से बनाएं:

#!/bin/bash
export TZ=UTC
/usr/sbin/cron.real

नई क्रोन फ़ाइल को निष्पादन योग्य बनाएं:

chmod ugo+rx cron

अब, क्रोन डेमॉन को पुनरारंभ करें:

service cron restart

आपकी क्रॉन जॉब्स अब UTC- आधारित शेड्यूल पर चलेंगी - HOWEVER, भले ही जिस समय उन्हें निष्पादित किया जाता है वह UTC होगा, जब वे चलाते हैं तो सिस्टम के लिए जो भी परिभाषित किया गया है, उसके लिए उनके पास timezone सेट होगा। इसे बदलने के लिए, किसी भी आदेश से पहले इसे अपने कॉन्टैब में रखें:

TZ=UTC

तो आपका कॉन्टैब कुछ इस तरह दिखेगा:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
TZ=UTC
00 19 * * * date > /tmp/date.log

1
दो स्थानों पर TZ = UTC सेट करने की बात क्या है? क्या आप अभी इसे crontab फ़ाइल में नहीं डाल सकते हैं?
Phương Nguyễn

सं। टीटी = यूटीसी को कोंट्रेब फ़ाइल में डालना केवल क्रोन नौकरियों के लिए निर्धारित करता है, क्रोन के लिए ही नहीं। यह नौकरी के निष्पादन के समय को प्रभावित नहीं करता है।
मार्क रीड 20

5
  1. देख लो /etc/default/cron। आप TZयहाँ सभी के लिए सेट कर सकते हैं- crontabs और यह TZ=UTCiirc होना चाहिए । तो आपका तरीका काम करना चाहिए था।

  2. Fcron पर एक नजर है । आप अलग-अलग समय-क्षेत्रों में अलग-अलग क्रॉस्टैब्स सेट कर सकते हैं:

    timezone-name 'time zone of the system'

    दिए गए समय क्षेत्र में कार्य को चलाएं। टाइमज़ोन-नाम एक स्ट्रिंग है जो पर्यावरण चर के लिए मान्य है TZ: अधिक विवरण के लिए अपने सिस्टम का प्रलेखन देखें। उदाहरण के लिए, "यूरोप / पेरिस" एक लिनक्स सिस्टम पर मान्य है। यह विकल्प डेलाइट सेविंग टाइम परिवर्तन को सही ढंग से संभालता है। जब इस विकल्प को परिभाषित करने वाला काम चलाया जाता है, तो TZ environ, मेंट्रेन चर समयक्षेत्र के मान पर सेट होता है।

    कृपया ध्यान दें कि यदि आप एक त्रुटिपूर्ण टाइमज़ोन-नाम तर्क देते हैं, तो इसे चुपचाप नजरअंदाज कर दिया जाएगा, और सिस्टम के समय क्षेत्र में नौकरी चलेगी।


खैर मैंने इसकी जाँच की और कोंट्राब तभी काम करता है जब मैं स्थानीय समय के रूप में ट्रिगर समय निर्धारित करता हूं। UTC के लिए समय निर्धारित करना अभी काम नहीं करता है।
अल

अच्छी तरह से 4 साल बाद और मैं / etc / default / cron में फ़ाइल पर एक झांकना था और अब यह आधिकारिक तौर पर हटा दिया गया है
the0ther

4 साल बाद एक गिरावट? हां यह अब अमान्य है लेकिन यह दिन में वापस नहीं आया था। फिर कोई भी उपयोगकर्ता 11.04 अब नहीं है, मुझे उम्मीद है।
रिनविंड

3
यदि यह उत्तर अमान्य है, तो आपको इसे हटा देना चाहिए; StackExchange पर जानबूझकर गलत जानकारी रखने का कोई मतलब नहीं है। ऐसा लगता है कि इस्तेमाल किया विषय पर और / या सही काफी सही जानकारी की तलाश में इस पृष्ठ पर जाकर किसी को भी अप्रासंगिक है किया जाना है।
क्क्सप्लसोन

4

कृपया उबंटू-विशिष्ट समाधान के लिए मेरी अगली पोस्ट देखें

मुझे पता है कि यह एक उबंटू मंच है, लेकिन मेरा मानना ​​है कि इसका उत्तर बहुत ही समान होगा कि आप इसे Red Hat सिस्टम पर कैसे करेंगे। मेरे पास इस पर परीक्षण करने के लिए एक उबंटू प्रणाली काम नहीं है, लेकिन मैंने रेड हैट पर इसका परीक्षण किया।

आपको बस अपने क्रोन डेमन इनिट स्क्रिप्ट में एक पंक्ति जोड़ने की आवश्यकता है। सेट करें और इस तरह पर्यावरण चर, निर्यात करें:

export TZ=UTC

फिर अपने क्रोन डेमॉन को पुनरारंभ करें। सुनिश्चित करें कि आपने यह निर्यात क्रोन डेमॉन स्टार्ट स्क्रिप्ट में किया है, किसी अन्य चर सेटिंग और सोर्सिंग के बाद - मुझे लगता है कि यह हो सकता है कि /etc/default/cronस्क्रिप्ट के मूल पोस्टर के संपादन ने उसके लिए काम नहीं किया। हो सकता है कि उसने इसे सेट कर दिया हो, लेकिन इसके बाद स्क्रिप्ट में कुछ और घट गया।

ध्यान दें कि यह केवल क्रोन डेमॉन को प्रभावित करेगा, न कि आपके द्वारा क्रोन के माध्यम से चलाए जाने वाले रोजगार, इसलिए यदि आप चाहते हैं कि क्रोन जॉब यूटीसी को अपने टाइमज़ोन के रूप में उपयोग करें, तो आपको इसे स्वयं नौकरी में भी सेट करना होगा।

आप शायद इस शब्दशः को कॉपी नहीं कर सकते हैं और यह एक उबंटू बॉक्स पर काम करता है, लेकिन यहां एक इनिट स्क्रिप्ट है जो मैंने रेड हैट पर इसका परीक्षण किया था। आप start()फ़ंक्शन से ठीक पहले निर्यात पाएंगे :

#!/bin/sh
#
# crond          Start/Stop the cron clock daemon.
#
# chkconfig: 2345 90 60
# description: cron is a standard UNIX program that runs user-specified \
#              programs at periodic scheduled times. vixie cron adds a \
#              number of features to the basic UNIX cron, including better \
#              security and more powerful configuration options.

### BEGIN INIT INFO
# Provides: crond crontab
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start:  2345
# Default-Stop: 90
# Short-Description: run cron daemon
# Description: cron is a standard UNIX program that runs user-specified 
#              programs at periodic scheduled times. vixie cron adds a 
#              number of features to the basic UNIX cron, including better 
#              security and more powerful configuration options.
### END INIT INFO

[ -f /etc/sysconfig/crond ] || { 
    [ "$1" = "status" ] && exit 4 || exit 6 
}

RETVAL=0
prog="crond"
exec=/usr/sbin/crond
lockfile=/var/lock/subsys/crond
config=/etc/sysconfig/crond

# Source function library.
. /etc/rc.d/init.d/functions

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

export TZ=UTC
start() {
    if [ $UID -ne 0 ] ; then
        echo "User has insufficient privilege."
        exit 4
    fi
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon $prog $CRONDARGS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
}

stop() {
    if [ $UID -ne 0 ] ; then
        echo "User has insufficient privilege."
        exit 4
    fi
    echo -n $"Stopping $prog: "
    if [ -n "`pidfileofproc $exec`" ]; then
        killproc $exec
        RETVAL=3
    else
        failure $"Stopping $prog"
    fi
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
}

restart() {
    stop
    start
}

reload() {
    echo -n $"Reloading $prog: "
    if [ -n "`pidfileofproc $exec`" ]; then
        killproc $exec -HUP
    else
        failure $"Reloading $prog"
    fi
    retval=$?
    echo
}

force_reload() {
    # new configuration takes effect after restart
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status -p /var/run/crond.pid $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

0

बस इसे उबंटू 14/16 पर समझ लिया। मेरे लिए पूरी तरह से काम किया।

चरण (सुडौल निहित):

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

0

शेल स्क्रिप्ट में utc समय का मूल्यांकन करने के बारे में क्या? हर घंटे चलाने के लिए शेल स्क्रिप्ट को शेड्यूल करें। स्क्रिप्ट के शीर्ष पर दिनांक कमांड से UTC घंटा मिलता है। यदि यह यूटीसी घंटे नहीं है, तो आप बाहर निकलें।

यदि यह 1am utc नहीं है तो यह स्क्रिप्ट बाहर निकल जाएगी।

#!/bin/bash
if [ $(date -u +"%H") != "01" ]; then
 exit 0
fi

0

आप पर्यावरण चर CRON_TZ सेट कर सकते हैं। यदि क्रोन जॉब किसी दूरस्थ सर्वर पर चलाया जाता है, तो आपको शायद यह ध्यान देना चाहिए कि crontab द्वारा उपयोग किया गया शेल sh है । आप / etc / crontab पर दोबारा जाँच कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.