ক্রোন বনাম ঘুম - দক্ষ সিপিইউ / মেমরি ব্যবহারের ক্ষেত্রে কোনটি ভাল?


18

কেস:

আমাকে নির্দিষ্ট সময় অন্তর কয়েকটি কমান্ড / স্ক্রিপ্ট চালানো দরকার এবং এর জন্য আমার দুটি বিকল্প রয়েছে:

  1. একটি সেট আপ cron-job
  2. sleepলিপি নিজেই একটি লুপ প্রয়োগ ।

প্রশ্ন:

রিসোর্স গ্রাহ্য দৃষ্টিকোণ থেকে ভাল বিকল্পটি কোনটি, কেন? কি cronভাল উপায়? ক্রোন কি কিছু ধরণের ট্রিগার ব্যবহার করে বা অন্য কিছুকে দক্ষ করে তোলে? কাজগুলি পরীক্ষা করতে এবং শুরু করতে ক্রোন কোন পদ্ধতি ব্যবহার করে?

উত্তর:


14

ক্রোন ব্যবহার করুন কারণ এটি একটি আরও ভাল এবং আরও মানক অনুশীলন। কমপক্ষে যদি এটি এমন কিছু হয় যা নিয়মিতভাবে চলবে (আপনি কেবল এক মিনিটের মধ্যে একসাথে টানলেন এমন কিছু নয়)। cronএকটি ক্লিনার এবং আরও মানক উপায়। এটি আরও ভাল কারণ এটি টার্মিনাল থেকে পৃথক শেলটি চালায় - দুর্ঘটনাজনিত সমাপ্তি এবং অন্যান্য প্রক্রিয়াগুলির উপর নির্ভরতা নিয়ে কোনও সমস্যা নেই।

সংস্থানগুলি সম্পর্কে: সিপিইউ: উভয় প্রক্রিয়া ঘুমায় - যখন তারা ঘুমায় তখন তারা সিপিইউ নষ্ট করে না। cronজিনিসগুলি পরীক্ষা করার জন্য আরও ঘন ঘন জেগে ওঠে, তবে তা সেভাবেই হয় (আপনার প্রক্রিয়াটির জন্য আর কিছু নয়)। এবং এটি নগণ্য লোড, বেশিরভাগ ডেমনগুলি মাঝে মধ্যে জেগে। স্মৃতি: আপনার সম্ভবত cronএই প্রক্রিয়াটি নির্বিশেষে চলছে, সুতরাং এটি মোটেই ওভারহেড নয়। তবে ক্রোনটি কেবল তখনই শেলটি শুরু করবে যখন স্ক্রিপ্টটি বলা হবে, যেখানে আপনার স্ক্রিপ্টটি স্মৃতিতে লোড থাকবে (পরিবেশ সহ একটি ব্যাশ প্রক্রিয়া - কয়েক কিলোবাইট, যদি না আপনি শেল ভেরিয়েবলের সমস্ত কিছু লোড করছেন)।

সব মিলিয়ে, সংস্থানগুলির জন্য এটি কোনও বিষয় নয়।


19

cron(বা anacron) ব্যবহার করুন ।

বিরতিতে ক্রোন জিনিস চালানোর জন্য ডিজাইন করা হয়েছে। এটিই কেবল এটিই করে, এবং বহু বছর ধরে ক্রোনটিতে এটি তৈরি করার জন্য প্রচুর কাজ করা হয়েছিল যা এটি আজ।

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

আপনার যদি না করতে হয় তবে চাকাটি পুনর্নবীকরণ করবেন না।


10

ইতিমধ্যে কিছু ভাল উত্তর cronএবং sleepপারফরম্যান্স রয়েছে, তবে আমি কিছু ধরণের বৈশিষ্ট্য তুলনা যুক্ত করতে চাই।

প্রো cron:

  • ইতোমধ্যে ইউনিক্স / লিনাক্স সিস্টেমে চলছে
  • স্থিতিশীল এবং প্রমাণিত
  • পটভূমি প্রক্রিয়া জন্য ডিজাইন করা
  • সিস্টেমের শুরু থেকে পরবর্তী দিকে চলে এবং আপনার স্ক্রিপ্টটি একবার ইনস্টল হয়ে যাবে
  • দীর্ঘমেয়াদী চক্রের সহজ প্রবেশ (ঘন্টা, দিন, সপ্তাহ)
  • জটিল দীর্ঘমেয়াদী পুনরাবৃত্তিগুলির অনুমতি দেয় ("প্রতি দ্বিতীয় রবিবার সকাল সাড়ে ৫ টা ৫৫ মিনিটে")

প্রো sleep:

  • একটি স্ক্রিপ্ট বজায় রাখা সহজ
  • অগ্রভূমি প্রক্রিয়াগুলির জন্য সহজ
  • ঘুমের সময়গুলি এক মিনিটের চেয়ে কম এবং আরও সুনির্দিষ্ট করে
  • জটিল ঘুম / ক্রিয়া চক্রের অনুমতি দেয় ("এই অংশটি চালান, তারপরে 10 সেকেন্ড ঘুমান, তারপরে অন্য অংশটি চালান এবং দুই ঘন্টা ঘুমান")

4

ক্রোন কি কিছু ধরণের ট্রিগার বা অন্য কিছুকে দক্ষ করে তোলে?

আমি একবার দেখেছি cat /proc/`pidof crond`/stackcrondটানা কয়েকবার এটি মুদ্রণ করে আমি দেখতে পাচ্ছি যে কেবলমাত্র হৃদয়_নোস্লিপে ঘুমায়।

>cat /proc/`pidof crond`/stack
[<ffffffff810a0614>] hrtimer_nanosleep+0xc4/0x180
[<ffffffff810a073e>] sys_nanosleep+0x6e/0x80
[<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff

sleep ইউটিলিটি একই সিস্টেম কল ব্যবহার করে।

>sleep 100 &
[1] 12761
>cat /proc/12761/stack
[<ffffffff810a0614>] hrtimer_nanosleep+0xc4/0x180
[<ffffffff810a073e>] sys_nanosleep+0x6e/0x80
[<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff

আমি উভয় ইউটিলিটি ধরে নিই (crond এবং sleep) এর অবশ্যই কম সিপিইউ ব্যবহার থাকতে হবে এবং আপনার যদি অনুকরণের প্রয়োজন হয় তবে আপনি অবশ্যই cronসংজ্ঞাটি ব্যবহার করতে পারেন sleep

হালনাগাদ. crondএর ক্রিয়াকলাপটি পর্যবেক্ষণ করা ভাল

strace -p `pidof crond`

উচ্চ আন্ডাররেটেড উত্তর।
হাশিম

3

আপনি যে প্রধান পার্থক্যটি সন্ধান করছেন তা হ'ল এটি cronঅবিরাম চলমান নয়। হিসাবে ব্যাখ্যা করা হয়েছে man cron:

   cron then wakes up every minute, examining all stored crontabs,  check
   ing  each  command  to  see  if it should be run in the current minute.
   When executing commands, any output is  mailed  to  the  owner  of  the
   crontab (or to the user named in the MAILTO environment variable in the
   crontab, if such exists).  The children copies of  cron  running  these
   processes  have their name coerced to uppercase, as will be seen in the
   syslog and ps output.

অন্য কথায়, cronকেবলমাত্র এক মিনিটে একবার শুরু করা হবে এবং এটি চালানো উচিত কিনা তা পরীক্ষা করে। অন্যদিকে আপনার ঘুমের পদ্ধতির জন্য আপনার আসল sleepকমান্ড, আপনার শেল, আপনার টার্মিনাল এবং এর প্রয়োজন হবেwhile একই সাথে চলতে চলতে (বা যাই হোক না কেন) লুপের প্রয়োজন হবে।

এমনকি যদি তারা একই সংখ্যক প্রক্রিয়া চালু করে cronতবে আরও ভাল। এটি তাদের কাজের জন্য খুব ভাল হতে থাকে এমন লোকেদের দ্বারা এটি স্পষ্টভাবে লেখা হয়েছে। এটি একটি সাধারণ শেল লুপের চেয়ে আরও ভাল কাজ করতে বাধ্য।


5
উভয় ঘুম - কার্যকরভাবে কোনও পার্থক্য নেই। আপনার শেলটি যে ঘুমায় তা কেবল ঘুমের মেয়াদ শেষ হলেই জেগে ওঠে। এটি ক্রোন ছাড়া আর কোনও সিপিইউ ব্যবহার করে না। যদি কিছু হয় তবে ক্রোন আরও ঘন ঘন জেগে থাকে কারণ এতে কিছু পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে দেখতে হয়, যখন আপনার প্রক্রিয়াটি সর্বদা ঘুমায়। তবে, আপনি আরও একটি বাশ প্রক্রিয়া লোড পেয়ে যাবেন (ক্রোন ছাড়াও, যা যে কোনওভাবে চালিত হয়), সুতরাং এটি আরও কিছুটা র‌্যাম (কয়েকটি কেবি) ব্যবহার করে।
orion

3

পার্থক্যটি আসে যে আপনি আরও স্ক্রিপ্টগুলি ঘুমানোর প্রয়োজন যুক্ত করার সাথে সাথে আপনি আরও একাধিক প্রক্রিয়া ঘুমের অপেক্ষায় বসে থাকবেন, একক প্রক্রিয়া (ক্রোন) এর পরিবর্তে ঘুম থেকে জেগে ওঠা এবং নির্ধারিত কোনও স্ক্রিপ্টগুলি চালিয়ে যায় যা পরবর্তী রান পর্যন্ত বন্ধ হয়ে যায়। ক্রোন এমন একটি প্রক্রিয়া অনুমোদন করে যা সময় মতো অন্যান্য স্ক্রিপ্টগুলি চালনার জন্য বিশেষভাবে তৈরি করা হয়, প্লাস ক্রোন আপনাকে তুলনামূলকভাবে নির্বিঘ্নে সময়সূচী করতে দেয় যখন কোনও কিছু চালানো উচিত, সপ্তাহের বা মাসের দিনগুলি, নির্দিষ্ট সময়গুলিতে বা প্রতি 5 মিনিটের মধ্যে ইত্যাদি etc.

* শুধু এটি আবার আমাকে ক্রোন এর আরেকটি সুবিধা সম্পর্কে ভাবতে বাধ্য করে। পর্যায়ক্রমে চালিত সমস্ত স্ক্রিপ্টগুলি তখন এক জায়গায় থাকে এবং সেগুলি কখন এবং কতবার চলবে তা সেখান থেকে চেক করা সহজ। অন্যথায় আপনাকে স্বতন্ত্র স্ক্রিপ্টগুলি পরীক্ষা করতে হবে।


1

ইতিমধ্যে ভাল এবং আরও বুদ্ধিমান উত্তর রয়েছে, তবে আমি কেবল sleepএটিই উল্লেখ করতে চেয়েছিলাম যে আপনার অন্যান্য পরিবর্তনশীলগুলির একটি ফাংশন হিসাবে বলুন, আপনার চলক পরিমাণের জন্য প্রক্রিয়াটি স্থির করতে পারবেন have

যদি আমি স্ক্রিপ্টটি লিখতে থাকি notify-sendতবে যে পরিমাণ ব্যাটারি রয়ে গেছে এবং যদি এটি পূর্বনির্ধারিত সমালোচনামূলক স্তরের নীচে থাকে তবে আমি sleepপ্রতিটি সময়ের ব্যাটারি পরীক্ষার পরিবর্তে শতকরা হারের বর্তমান ব্যাটারি স্তরের একটি কার্যকারিতা সময়ের জন্য স্ক্রিপ্টটি তৈরি করতে পারি can ক্রোনটির সাহায্যে এক বা দুই মিনিট এমনকি আমি যখন জানতাম এটি শেষ পরীক্ষিত হয়েছিল তখন এটি 80% ছিল।

Battery_notify.sh

#!/bin/bash
CRIT=15
while true; do
    # current battery level
    BAT_LEVEL=`acpi -b |grep -Eo "[0-9]+%"|grep -Eo "[0-9]+"`
    interval=$((($BAT_LEVEL -$CRIT) * 120)) # loose estimate of backup time for each percentage of battery charge.
    # Is AC plugged in?
    state=`acpi -b |grep -Eo "[A-Za-z]+harging"` 
    #only notify if not Plugged in
    if [ "$state" = "Discharging" ] ; then
        # is battery below CRIT level?
        if [ $BAT_LEVEL -le $CRIT ]; then
        aplay ~/apert.wav &
        notify-send "Battery-Low!!!" -i /home/bibek/batt.png -t 900
        sleep 100  # nag me each 100 secs untill I plug the thing 
        else
            sleep $interval
        fi
    else
        # if plugged in sleep 
        if [ $BAT_LEVEL -le $CRIT ]; then
            sleep $interval
        else
            # to check if the AC is unplugged before battery gains charge above CRIT.
            sleep 100 
        fi
    fi
    done

0

একক কাজের sleepপরিবর্তে ব্যবহার cronকরা আরও দক্ষ হতে পারে। তবে যেহেতু আপনি সাধারণত cronকোনও ক্ষেত্রে দৌড়াদৌড়ি করছেন তাই এটিকে ব্যবহার করা নিখরচায় আসে বা যথেষ্ট পরিমাণে পার্থক্য হওয়ায় কোনও পার্থক্য নেই। সুতরাং আপনি অন্যথায় cronনিখরচায় এমবেডেড সিস্টেমে না থাকলে আমি যাব cron

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