আপনি কীভাবে ক্রন্টবের জন্য সময় অঞ্চল নির্ধারণ করবেন?


63

আমি এসিপিআই ওয়েকআপ সেট আপ করেছি যাতে আমার ল্যাপটপটি প্রতি সকালে একটি নির্দিষ্ট সময়ে ঘুম থেকে ওঠে। এর জন্য সময় অঞ্চলটি ইউটিসি। আমি ইউটিসি ব্যবহার করে আমার ক্রন্টব্যাব সেট আপ করতে চাই যাতে সেগুলি ওয়েকআপ অ্যালার্মের সাথে ফিট করে।

তুমি এটা কিভাবে কর?

আমি /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এবং TZক্রোন্টাবের অন্যান্য স্পেসিফিকেশন TZক্রোন দ্বারা শুরু হওয়া প্রক্রিয়াগুলির জন্য কী ব্যবহার করা উচিত তা কেবল নির্দিষ্ট করে, এটি শুরুর সময়কে প্রভাবিত করে না।

বেশিরভাগ সমাধানগুলি যা আমি মাঝখানে একটি ইউটিলিটি জড়িত দেখেছি তাই ক্রোন এমন কিছু শুরু করবে যা ইউটিসি-তে কখন লাথি মারবে তা নির্ধারণ করবে (উদাহরণস্বরূপ যদি আপনি জানেন যে আপনি কেবল ডিএসটি পরিবর্তনের বিষয়ে উদ্বিগ্ন রয়েছেন, ২ ঘন্টা আগে লাথি মেরে গণনা করুন) সময় পার্থক্য, এবং এটা তারপর লাথি বন্ধ। কটাক্ষপাত আছে 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
    
  • তারপরে পুনরায় বুট করুন। যখন আপনার সিস্টেম শুরু হবে: তারিখ

  • এখন আপনার টাইমজোনটি এখন সেখানে থাকা উচিত, এবং ক্রোন এটি দেখবে।

এফওয়াইআই: টিজেড ভেরিয়েবল নির্ধারণ করা একটি অস্থায়ী সমাধান এবং এটি কখনও কখনও "মাস্ক" হিসাবে কাজ করতে পারে।


1
CentOS সামঞ্জস্যপূর্ণ সমাধানের জন্য +1 এবং (ইসি 2 অ্যামাজন লিনাক্স)। পুরো পুনঃসূচনাটি একটি ভাল ধারণা হতে পারে তবে আমার জন্য dateরিবুট ছাড়াই কাজ করেছে এবং ওএস পুনরায় চালু sudo service crond restartকরা আমার ক্রোন কাজের সময় ঠিক করার জন্য যথেষ্ট ছিল।
ডাভুর

+1 ধন্যবাদ এটি কাজ করছে।
জিম

13

মার্চ ২০১ of অবধি, আমি আবিষ্কার করেছি যে প্রতিটি ক্রন্টবায় ক্রন্ড CRON_TZ পরিবর্তনশীলকে সমর্থন করে।

CRON_TZ ভেরিয়েবল ক্রোন সারণীর জন্য নির্দিষ্ট সময় অঞ্চল নির্দিষ্ট করে। ব্যবহারকারীর সারণিতে নির্দিষ্ট সময় অঞ্চল অনুযায়ী একটি সময় প্রবেশ করানো উচিত। লগ ফাইলে লেখার জন্য ব্যবহৃত সময়টি স্থানীয় সময় অঞ্চল থেকে নেওয়া হয়, যেখানে ডেমন চলছে।

- crontab (5) ম্যানুয়াল পৃষ্ঠা থেকে উদ্ধৃতি

এটি আমাকে স্থানীয় সময় প্রতিটি ক্রোনজব চালানোর সময় নির্দিষ্ট করার অনুমতি দেয়, যা স্বয়ংক্রিয়ভাবে ডিএসটি হিসাবে গণ্য হয়েছিল, যখন সার্ভারটি ইউটিসিতে থাকে।


আমি এই লিঙ্কটিও সহায়ক বলে খুঁজে পেয়েছি: সার্ভারফল্ট / প্রশ্ন / 88৮৮৮৯ / … টাইমজোন অপশনটি সন্ধান করার জন্য আমার ls /usr/share/zoneinfo/Americaঅপশনগুলি দেখার জন্য আমার প্রবেশ করা দরকার ছিল ।
চিভাহাগডোগ

7

ঠিক আছে, আমি কিছুটা সময় নিয়েছিলাম এবং বুঝতে পেরেছিলাম যে উবুন্টু নাট্টিটিতে এটি কীভাবে করা যায় এবং আমি কীভাবে এটি কাজ করেছিলাম তা এখানে's আরও মার্জিত উপায় হতে পারে, কিন্তু এই ভাবে কাজ করে।

প্রথমত, আমাদের টিউজেড ভেরিয়েবল সেট করে এমন একটি শেলের ক্রোন এক্সিকিউটেবল মোড়ানো দরকার। এখানে কীভাবে:

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

আপনার ক্রোন জবগুলি এখন একটি ইউটিসি-ভিত্তিক সময়সূচীতে চলবে - যদিও, মৃত্যুদন্ড কার্যকর করার সময়টি ইউটিসি হবে, যখন তারা চালায় তখন তাদের সিস্টেমের জন্য নির্ধারিত যেকোন সময়সীমা নির্ধারণ করা হবে। এটি পরিবর্তন করতে, কোনও ক্রমান্ডের আগে এটি আপনার ক্রন্টবায় রাখুন:

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
দুটি জায়গায় টিজেড = ইউটিসি সেট করার বিষয়টি কী? আপনি কি এটি কেবল ক্রন্টব ফাইলটিতে রাখতে পারবেন না?
ফ্যাং এনগুইন

না। ক্রন্টব ফাইলটিতে টিজেড = ইউটিসি লাগানো কেবল ক্রোন কাজের জন্য সেট করে, ক্রোন নিজেই নয়। এটি কাজের ফাঁসির সময়কে প্রভাবিত করে না।
মার্ক রিড 20

5
  1. দেখুন /etc/default/cron। আপনি TZএখানে সমস্ত- crontabs জন্য সেট করতে পারেন এবং এটি iirc হওয়া উচিত TZ=UTC। সুতরাং আপনার পদ্ধতি কাজ করা উচিত ছিল।

  2. কটাক্ষপাত আছে fcron । আপনি বিভিন্ন টাইম জোনে পৃথক ক্রন্টব্যাব সেট করতে পারেন:

    timezone-name 'time zone of the system'

    প্রদত্ত সময় অঞ্চলে কাজ চালান। টাইমজোন-নাম একটি স্ট্রিং যা পরিবেশ পরিবর্তনশীল টিজেডের জন্য বৈধ: আরও তথ্যের জন্য আপনার সিস্টেমের ডকুমেন্টেশন দেখুন। উদাহরণস্বরূপ, "ইউরোপ / প্যারিস" একটি লিনাক্স সিস্টেমে বৈধ। এই বিকল্পটি দিবালোক সংরক্ষণের সময় পরিবর্তনগুলি সঠিকভাবে পরিচালনা করে। টিজেড এনভায়রনমেন্ট, মেন্ট ভেরিয়েবল টাইমজোনটির মান সেট করা হয় যখন এই বিকল্পটি সংজ্ঞায়িত কোনও কাজ চালানো হয়।

    দয়া করে মনে রাখবেন যে আপনি যদি ভ্রান্ত সময় অঞ্চল-যুক্তির যুক্তি দেন তবে তা চুপচাপ উপেক্ষা করা হবে এবং কাজটি সিস্টেমের টাইম জোনে চালিত হবে।


ঠিক আছে আমি এটি পরীক্ষা করেছিলাম এবং ক্রোনট্যাব কেবল তখনই কাজ করে যখন আমি স্থানীয় সময় হিসাবে ট্রিগার সময় সেট করি। ইউটিসিতে সময় নির্ধারণ করা ঠিক কাজ করে না।
alj

ভাল 4 বছর পরে এবং আমি / ইত্যাদি / ডিফল্ট / ক্রোন ফাইলটি
দেখেছিলাম

4 বছর পরে একটি ডাউনভোট? হ্যাঁ এটি এখন অবৈধ তবে দিনটিতে এটি আর ফিরে আসেনি। তারপরে আবার কেউ আর ১১.০৪ ব্যবহারকারীর নয়, আমি আশা করি।
রিঞ্জউইন্ড

3
যদি এই উত্তরটি অবৈধ হয়, আপনার সম্ভবত এটি মুছে ফেলা উচিত; স্ট্যাকএক্সচেঞ্জে জেনেশুনে ভুল তথ্য রাখার কোনও মানে নেই। এটি যে অনন্য -বিষয় এবং / বা সঠিক হিসাবে ব্যবহৃত হত সঠিক তথ্যের সন্ধানে এই পৃষ্ঠাটি দেখার জন্য যে কারও কাছে যথেষ্ট অপ্রাসঙ্গিক।
কুইকসপ্লসোন

4

উবুন্টু-নির্দিষ্ট সমাধানের জন্য দয়া করে আমার পরবর্তী পোস্টটি দেখুন

আমি জানি এটি একটি উবুন্টু ফোরাম, তবে আমি বিশ্বাস করি যে উত্তরটি আপনি কীভাবে রেড হ্যাট সিস্টেমে এটি করতে পারবেন তার সাথে খুব মিল থাকবে। এটি পরীক্ষা করার জন্য আমার কাছে উবুন্টু সিস্টেম ব্যবহারের দরকার নেই তবে আমি এটি রেড হ্যাটটিতে পরীক্ষা করেছি।

আপনাকে যা করতে হবে তা হ'ল আপনার ক্রোন ডেমোন আরআই স্ক্রিপ্টে একটি লাইন যুক্ত করা। পরিবেশ ভেরিয়েবল টিজেড সেট করুন এবং রফতানি করুন:

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 এ এটি প্রকাশিত হয়েছে। আমার জন্য নিখুঁতভাবে কাজ করেছেন।

পদক্ষেপ (sudo অন্তর্ভুক্ত):

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 সময় মূল্যায়ন সম্পর্কে কি? প্রতি ঘন্টা ঘন্টা চালানোর জন্য শেল স্ক্রিপ্ট শিডিউল করুন। স্ক্রিপ্টের শীর্ষে ইউটিসি ঘন্টা ডেট কমান্ড থেকে পান। এটি যদি আপনি চান এমন ইউটিসি ঘন্টা না হয় তবে প্রস্থান করুন।

এই স্ক্রিপ্টটি 1am ইউটিসি না হলে প্রস্থান করবে।

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

0

আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন CRON_TZ ক্রন জব একটি দূরবর্তী সার্ভারে চালানো হলে, আপনি সম্ভবত লক্ষ্য করা উচিত যে নিম্নলিখিতরূপে crontab পরিবর্তন দ্বারা ব্যবহৃত শেল হল SH । আপনি / etc / crontab এ ডাবল-চেক করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.