এডাব্লুএস ইলাস্টিক বিয়ানস্টালক, ক্রোনজব চালাচ্ছেন


89

আমি জানতে চাই যে প্রতি মিনিটে কার্যকর করার জন্য ক্রোনজব / টাস্ক সেটআপ করার কোনও উপায় আছে কিনা। বর্তমানে আমার যে কোনও উদাহরণটি এই কাজটি চালাতে সক্ষম হওয়া উচিত।

সাফল্য ছাড়াই কনফিগার ফাইলগুলিতে এটি করার চেষ্টা করেছি:

container_commands:
  01cronjobs:
    command: echo "*/1 * * * * root php /etc/httpd/myscript.php"

এটি করার সঠিক উপায় এটি কিনা আমি সত্যই নিশ্চিত নই

কোন ধারনা?


4
আদেশ কি ঠিক আছে? আমার অর্থ ... এটি হতে পারে: কমান্ড: প্রতিধ্বনি "* / 1 * * * * মূল পিএইচপি /etc/httpd/myscript.php"> /etc/cron.d/ কিছু উপায়, আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিই leader_only পতাকা, অন্যথায় সমস্ত মেশিন এই ক্রোন জব একবারে
জ্বালিয়ে দেবে

হ্যাঁ! অবশ্যই নেদার_ واحد পতাকা ব্যবহার করে, আমি কমান্ডটি পরিবর্তন করার চেষ্টা করব।
ওয়ানমা

উত্তর:


98

এইভাবে আমি ইলাস্টিক বিয়ানস্টালকে ক্রোন জব যুক্ত করেছি:

আপনার অ্যাপ্লিকেশনটির মূলে একটি ফোল্ডার তৈরি করুন। তারপরে .ebextensions ফোল্ডারের ভিতরে একটি কনফিগার ফাইল তৈরি করুন। আমি উদাহরণের জন্য কোডক্যাগ ব্যবহার করব। তারপরে এটি উদাহরণ কোডসিফ-এ যুক্ত করুন

container_commands:
  01_some_cron_job:
    command: "cat .ebextensions/some_cron_job.txt > /etc/cron.d/some_cron_job && chmod 644 /etc/cron.d/some_cron_job"
    leader_only: true

এটি ইলাস্টিক বিয়ানস্টালকের জন্য একটি ওয়াইএএমএল কনফিগারেশন ফাইল। আপনি যখন এটি আপনার পাঠ্য সম্পাদককে অনুলিপি করছেন তা নিশ্চিত করুন যে আপনার পাঠ্য সম্পাদকটি ট্যাবগুলির পরিবর্তে ফাঁকা জায়গা ব্যবহার করে। অন্যথায় আপনি এটি YB এ চাপলে আপনি YAML ত্রুটি পাবেন।

সুতরাং এটি যা করে তা হল 01_some_cron_job নামে একটি কমান্ড তৈরি করা। কমান্ডগুলি বর্ণানুক্রমিকভাবে চালিত হয় তাই 01 নিশ্চিত করে যে এটি প্রথম কমান্ড হিসাবে চালিত হয়েছে।

কমান্ডটি তারপরে কিছু_ক্রন_জব.টেক্সট নামের একটি ফাইলের বিষয়বস্তু নিয়ে যায় এবং এটি /etc/cron.d- এ কিছু_ক্রোন_জব নামে একটি ফাইল যুক্ত করে।

কমান্ডটি তারপরে /etc/cron.d/some_cron_job ফাইলে অনুমতিগুলি পরিবর্তন করে।

লিডার_নালি কী নিশ্চিত করে যে কমান্ডটি কেবল নেতৃস্থানীয় হিসাবে বিবেচিত হয় সেই ই সি 2 উদাহরণে চালিত হবে। প্রতিটি ই সি 2 ইভেন্টে চালানোর পরিবর্তে আপনার দৌড়ে থাকতে পারে।

তারপরে .ebextensions ফোল্ডারের মধ্যে কিছু_ ক্রোন_জব.টিএসটিএস্ট নামে একটি ফাইল তৈরি করুন। আপনি এই ফাইলটিতে আপনার ক্রোন জব স্থাপন করবেন।

উদাহরণস্বরূপ:

# The newline at the end of this file is extremely important.  Cron won't run without it.
* * * * * root /usr/bin/php some-php-script-here > /dev/null

সুতরাং এই ক্রোন জবটি রুট ব্যবহারকারী হিসাবে প্রতিদিনের প্রতি ঘন্টার প্রতি মিনিটে চলবে এবং আউটপুটটিকে / dev / নাল থেকে ফেলে দেবে। / usr / bin / php হল পিএইচপি করার পথ to তারপরে আপনার পিএইচপি ফাইলের পথে কিছু-পিএইচপি-স্ক্রিপ্ট-এখানে প্রতিস্থাপন করুন। এটি স্পষ্টতই ধরে নিচ্ছে আপনার ক্রোন জবটির পিএইচপি ফাইল চালানো দরকার।

এছাড়াও, নিশ্চিত করুন যে কোনও_কৌনিক_জব. টেক্সট ফাইলটির মন্তব্যের ঠিক মত ফাইলের শেষে একটি নতুন লাইন রয়েছে। অন্যথায় ক্রোন চলবে না।

আপডেট: ইলাস্টিক বিয়ানস্টালক আপনার দৃষ্টান্তগুলি স্কেল করে এলে এই সমাধানটিতে একটি সমস্যা রয়েছে। উদাহরণস্বরূপ, আসুন আমরা ক্রোন জবের সাথে আপনার একটি উদাহরণ রয়েছে তা বলি। আপনি ট্র্যাফিকের বৃদ্ধি পান তাই ইলাস্টিক বিয়ানস্টালক আপনাকে দুটি দৃষ্টান্ত পর্যন্ত স্কেল করে। লিডার_নালি কেবলমাত্র দুটি দৃষ্টান্তের মধ্যে আপনার কেবলমাত্র একটি ক্রোন কাজ চলছে তা নিশ্চিত করবে। আপনার ট্র্যাফিক হ্রাস পেয়েছে এবং ইলাস্টিক বিয়ানস্টালক আপনাকে এক নজরে স্কেল করে। তবে দ্বিতীয় উদাহরণটি বন্ধ করার পরিবর্তে, ইলাস্টিক বিয়ানস্টালকের প্রথম উদাহরণটি শেষ হয়েছিল যা ছিল was আপনার এখন কোনও ক্রোন জব নেই কারণ তারা কেবল প্রথম দফায় বন্ধ ছিল যা চালানো হয়েছিল। নীচের মন্তব্য দেখুন।

আপডেট 2: কেবল নীচের মন্তব্যগুলি থেকে এটি পরিষ্কার করুন: অ্যাডাব্লুএস এর এখন স্বয়ংক্রিয় দৃষ্টান্ত সমাপ্তির বিরুদ্ধে সুরক্ষা রয়েছে। আপনার নেতার উদাহরণে এটি সক্ষম করুন এবং আপনি যেতে ভাল। - নিকোলেস আর্ভাভালো অক্টোবর 28 '16 এ 9:23 এ


12
আমি আপনার পরামর্শটি কিছু সময়ের জন্য ব্যবহার করে আসছি এবং সম্প্রতি এমন একটি ইস্যুতে ছড়িয়ে পড়েছি যেখানে নেতা কোনওভাবে স্যুইচ করেছেন, ফলস্বরূপ একাধিক ঘটনা ক্রোন চালাচ্ছে। যে সমস্যা সমাধানের জন্য, আমি পরিবর্তন 01_some_cron_jobকরতে 02_some_cron_jobযোগ 01_remove_cron_jobsনিম্নলিখিত সঙ্গে command: "rm /etc/cron.d/cron_jobs || exit 0"। এইভাবে, প্রতিটি স্থাপনার পরে কেবল নেত্রীর কাছে cron_jobsফাইল থাকবে। যদি নেতারা পরিবর্তন করেন তবে আপনি কেবল পুনরায় চালনা করতে পারবেন এবং ক্রোনগুলি আবার একবার চালানোর জন্য স্থির হবে।
উইলেম রেনজেমা

4
আমি leader_onlyসম্পত্তি উপর নির্ভর বিরুদ্ধে পরামর্শ দিতে হবে । এটি কেবলমাত্র স্থাপনার সময় ব্যবহৃত হয় এবং আপনি যদি স্কেল ডাউন করেন বা আপনার "নেতা" উদাহরণটি ব্যর্থ হয় তবে আপনি সমস্যার রেফারেন্স
আর্নসলু

4
এটি করবেন না। এটি খুব বিশ্বাসযোগ্য নয়। আমি এই কাজটি করার একমাত্র উপায় হ'ল একটি মাইক্রো দৃষ্টান্ত চালিয়ে যাওয়া এবং সেখান থেকে ক্রাউন জব চালানো সিআরএল ব্যবহার করে। এটি গ্যারান্টি দেয় যে কেবলমাত্র একটি উদাহরণ এটি চালায় এবং যে নেত্রী ক্রোন ইনস্টল করেছেন তা সমাপ্ত নয়।
বেন সিনক্লেয়ার

4
আমি এটি একটি ছোট রুবি স্ক্রিপ্ট দিয়ে সমাধান করার চেষ্টা করেছি, আপনি এটি এখানে খুঁজে পেতে পারেন: github.com/SocialbitGmbH/AWSBeanstalkLeaderManager
টমাস কেকেইসেন

8
অ্যাডাব্লুএস এর এখন স্বয়ংক্রিয় দৃষ্টান্ত সমাপ্তির বিরুদ্ধে সুরক্ষা রয়েছে। আপনার নেতার উদাহরণে এটি সক্ষম করুন এবং আপনি যেতে ভাল।
নিকোলেস আর্ভাভালো

58

এখনই এটি করার আনুষ্ঠানিক উপায় (2015+)। দয়া করে প্রথমে এটি চেষ্টা করুন, এটি বর্তমানে সহজলভ্য এবং সবচেয়ে নির্ভরযোগ্য হিসাবে এখন পর্যন্ত সবচেয়ে সহজ পদ্ধতি।

বর্তমান নথি অনুসারে, কেউ তাদের তথাকথিত কর্মী স্তরে পর্যায়ক্রমিক কাজ চালাতে সক্ষম হয়

ডকুমেন্টেশন উদ্ধৃত:

এডাব্লুএস ইলাস্টিক বিয়ানস্টাল্ক পরিবেশের স্তরগুলির জন্য পর্যায়ক্রমিক কাজগুলিকে সমর্থন করে পরিবেশে পরিবেশগত স্তরগুলির একটি পূর্বনির্ধারিত কনফিগারেশন চালিয়ে যা একটি ধারক স্ট্যাকের সাথে ধারক নামে "v1.2.0" রয়েছে। আপনার অবশ্যই একটি নতুন পরিবেশ তৈরি করা উচিত।

ক্রোন.আইএমএল সম্পর্কেও আকর্ষণীয় বিষয় :

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

আপডেট: আমরা এই কাজটি পেতে সক্ষম হয়েছি। আমাদের অভিজ্ঞতা (নোড.জেএস প্ল্যাটফর্ম) থেকে এখানে কয়েকটি গুরুত্বপূর্ণ গ্যাটাচ রয়েছে:

  • ক্রোন.আইএমএল ফাইলটি ব্যবহার করার সময় , নিশ্চিত হয়ে নিন যে আপনার কাছে সর্বশেষ অ্যাজেসক্লি রয়েছে , কারণ পুরানো সংস্করণগুলি সঠিকভাবে কাজ করবে না।
  • নতুন পরিবেশ তৈরি করাও গুরুত্বপূর্ণ (কমপক্ষে আমাদের ক্ষেত্রে এটি ছিল), কেবল পুরানো ক্লোনটিই নয়।
  • আপনি যদি নিশ্চিত করতে চান যে আপনার ইসি 2 কর্মী স্তর উদাহরণে সিআরএন সমর্থিত আছে তবে এতে ( eb ssh) চাপুন এবং চালান cat /var/log/aws-sqsd/default.log। এটি হিসাবে রিপোর্ট করা উচিত aws-sqsd 2.0 (2015-02-18)। আপনার যদি 2.0 সংস্করণ না থাকে তবে আপনার পরিবেশ তৈরি করার সময় কিছু ভুল হয়েছে এবং উপরে বর্ণিত হিসাবে আপনাকে নতুন তৈরি করতে হবে।

4
ক্রোন.আইএমএল সম্পর্কে একটি দুর্দান্ত ব্লগ পোস্ট রয়েছে: অ্যামাজন ওয়েব সার্ভিসেস (
এডাব্লুএস

4
এর জন্য ধন্যবাদ - রোকি প্রশ্ন - আসন্ন ক্যালেন্ডারের ইভেন্টগুলির জন্য আমার ওয়েব অ্যাপ্লিকেশনটির ডেটাবেস ঘন্টার মধ্যে দুবার পরীক্ষা করার জন্য আমার ক্রোন দরকার এবং এটি যখন হয় তখন একটি অনুস্মারক ইমেল প্রেরণ করুন। এখানে সেরা সেটআপটি কী, আমার ওয়েব অ্যাপের কোনও রুটে ক্রোন.আইএমএল ইউআরএল পয়েন্ট থাকা উচিত? বা আমার কর্মী এনভিকে অ্যাপ্লিকেশনটিকে ডাটাবেসে অ্যাক্সেস দেওয়া উচিত? এই সেখানে খুব সামান্য!
খ্রিস্টান

4
@ ক্রিশ্চিয়ান আমরা যেভাবে এটি করি, আমাদের একই অ্যাপ্লিকেশনটি দুটি পৃথক পরিবেশে চলছে (সুতরাং কোনও বিশেষ কনফিগার প্রয়োজন নেই) - কর্মী এবং সাধারণ ওয়েব সার্ভার। কর্মী পরিবেশের একটি ENV ভেরিয়েবল সেট করে কিছু বিশেষ রুট সক্ষম করা আছে যা আমাদের অ্যাপ্লিকেশন সন্ধান করে। এইভাবে, আপনি সাধারণ অ্যাপ্লিকেশনটির সাথে ভাগ করে নেওয়া কোডবেসের বিলাসিতা থাকার সময় আপনার ক্রোন.আইএমএলে বিশেষ কর্মী-কেবল রুট সেট করতে পারেন। আপনার কর্মী অ্যাপ্লিকেশন সহজে ওয়েব সার্ভার এক হিসাবে একই সম্পদ অ্যাক্সেস করতে পারে: ডাটাবেস, মডেল, ইত্যাদি
xaralis

4
@ জ্যাকলাইনপাসোস ভি 1.2.0 হ'ল সমাধান স্ট্যাক সংস্করণ। নতুন পরিবেশ তৈরি করার সময় আপনি সমাধানের স্ট্যাকের কোন সংস্করণটি তৈরি করতে চান তা চয়ন করা উচিত। V1.2.0 এর চেয়ে নতুন কিছু করা উচিত। ইউআরএল সম্পর্কিত, এটি URL হওয়া উচিত যা আপনার অ্যাপ্লিকেশন শোনায়, কোনও ফাইল পাথ নয়। জাজানো ম্যানেজমেন্ট কমান্ডগুলি চালানো সম্ভব নয়, এটি কেবল এইচটিটিপি অনুরোধ করে।
xaralis

4
একটি জিনিস যা আমার কাছে স্পষ্ট নয় তা হ'ল যদি ক্রোন.আইএমএল এর মাধ্যমে ক্রোন জবগুলি চালানোর জন্য অতিরিক্ত ইসি 2 মেশিন বরাদ্দ না করার উপায় থাকে। আদর্শভাবে এটি এইচটিটিপি অনুরোধগুলি (যেমন ওয়েব স্তর) পরিবেশন করছে এমন একই মেশিনে চালিত হবে।
Wenzel Jakob

32

জামেবের প্রতিক্রিয়া সম্পর্কে, এবং আলার্ডিনিয়ালের উল্লেখ হিসাবে, আপনি কেবলমাত্র ইসি 2 উদাহরণটি ক্রোন কাজ চালায় তা নিশ্চিত করার জন্য আপনি 'নেতা_নি' সম্পত্তি ব্যবহার করতে পারেন।

Http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html থেকে নেওয়া উদ্ধৃতি :

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

আমি আমার পাতায় একই জিনিস অর্জন করার চেষ্টা করছি, তাই আমি যদি আমার পোস্টটি সমাধান করি তবে আপডেট করব।

হালনাগাদ:

ঠিক আছে, আমি এখন নিম্নলিখিত eb কনফিগারেশন ব্যবহার করে ক্রোনজবস করছি:

files:
  "/tmp/cronjob" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    content: |
      # clear expired baskets
      */10 * * * * /usr/bin/wget -o /dev/null http://blah.elasticbeanstalk.com/basket/purge > $HOME/basket_purge.log 2>&1
      # clean up files created by above cronjob
      30 23 * * * rm $HOME/purge*
    encoding: plain 
container_commands:
  purge_basket: 
    command: crontab /tmp/cronjob
    leader_only: true
commands:
  delete_cronjob_file: 
    command: rm /tmp/cronjob

মূলত, আমি ক্রোনজবগুলি দিয়ে একটি টেম্প ফাইল তৈরি করি এবং তারপরে টেম্প ফাইল থেকে পড়ার জন্য ক্রন্টব্যাট সেট করেছিলাম, তারপরে টেম্প ফাইলটি মুছুন। আশাকরি এটা সাহায্য করবে.


4
আপনি কীভাবে নিশ্চিত করবেন যে এই ক্রন্টব চালানো দৃষ্টান্তটি অটো স্কেলিংয়ের মাধ্যমে শেষ হয়ে যাবে না? ডিফল্টরূপে, এটি প্রাচীনতম উদাহরণটি সমাপ্ত করে।
সেবাস্তিয়ান

4
এটি এমন একটি বিষয় যা আমি এখনও সমাধান করতে সক্ষম হইনি। এটি আমাজনের কার্যকারিতার একটি ত্রুটি হিসাবে আমাকে আঘাত করে যে বর্তমানের ইবি দ্বারা সমাপ্ত হয়ে গেলে নেতার_আপনি কমান্ড কোনও নতুন নেতার ক্ষেত্রে প্রয়োগ করা হয় না। কিছু নিয়ে এলে শেয়ার করুন!
beterthanLive

7
সুতরাং আমি (পরিশেষে) কীভাবে স্বয়ংক্রিয়-স্কেলিং - কাস্টম অটো-স্কেলিং সমাপ্তি নীতিগুলি দ্বারা এই নেত্রীকে বাধা দেওয়া যায় তা আবিষ্কার করেছি। ডকস.আও.স.ম্যাজন
আউটসাইক্লিং /

4
@ নাট আপনি সম্ভবত এটি এখুনি আবিষ্কার করেছেন, তবে আমার যে আদেশগুলি চালিত হয় তার পাঠের উপর ভিত্তি করে, "কমান্ডগুলি" "ধারক_কম্যান্ডস" এর আগে চালানো হয় যাতে আপনি ফাইলটি তৈরি করতে পারেন, তারপরে এটি মুছবেন, তারপরে ক্রন্টব চালানোর চেষ্টা করুন ।

4
প্রাচীনতম অবধি রাখার জন্য @ সেবাস্তেয়েন, এখানে আমি যা করছি তা হল: 1 - ইন্টেবলের সমাপ্তি সুরক্ষাটি সক্ষম করুন B 2 - অটো স্কেল গোষ্ঠীতে যান এবং আপনার ইবিএস এনভায়রনমেন্ট আইডিটি সন্ধান করুন, EDIT এ ক্লিক করুন এবং সমাপ্তকরণের নীতিগুলিকে "NewestInstance" এ পরিবর্তন করুন
রোনালদো বাহিয়া

12

উপরে উল্লিখিত হিসাবে, যে কোনও ক্রন্টব কনফিগারেশন স্থাপনের সাথে মৌলিক ত্রুটি এটি কেবল স্থাপনার সময়ে ঘটে। ক্লাস্টারটি স্বয়ংক্রিয়ভাবে ছোট হয়ে যায়, এবং তারপরে পিছনে ফিরে যায়, এটি প্রথম সার্ভারটিও বন্ধ হয়ে যায়। এছাড়াও কোনও ব্যর্থতা হবে না, যা আমার পক্ষে গুরুত্বপূর্ণ ছিল।

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

সুতরাং এখানে আমি যা নিয়ে এসেছি, যা আপাতদৃষ্টিতে অপ্রচলিত (যেমন ডাব্লুএস প্রতিনিধি মন্তব্য করেছেন) এবং এটি একটি হ্যাক হিসাবে বিবেচিত হতে পারে, তবে এটি কার্যকর হয় এবং ব্যর্থতার সাথে দৃ is় হয়। আমি এসডিকে ব্যবহার করে একটি কোডিং সমাধানটি বেছে নিয়েছি, যা আমি পিএইচপিতে দেখাবো, যদিও আপনি যে কোনও ভাষা পছন্দ করেন তেমন পদ্ধতি করতে পারেন।

// contains the values for variables used (key, secret, env)
require_once('cron_config.inc'); 

// Load the AWS PHP SDK to connection to ElasticBeanstalk
use Aws\ElasticBeanstalk\ElasticBeanstalkClient;

$client = ElasticBeanstalkClient::factory(array(
    'key' => AWS_KEY,
    'secret' => AWS_SECRET,
    'profile' => 'your_profile',
    'region'  => 'us-east-1'
));

$result = $client->describeEnvironmentResources(array(
    'EnvironmentName' => AWS_ENV
));

if (php_uname('n') != $result['EnvironmentResources']['Instances'][0]['Id']) {
    die("Not the primary EC2 instance\n");
}

সুতরাং এটি দিয়ে কীভাবে চলতে হয় এবং এটি কীভাবে পরিচালিত হয় ... আপনি প্রতিটি ইসি 2 ইভেন্টে সাধারণত ক্রন্টব থেকে স্ক্রিপ্ট কল করেন। প্রতিটি স্ক্রিপ্টে এটি শুরুতে অন্তর্ভুক্ত থাকে (বা আমি প্রতিটি ব্যবহারের জন্য একটি একক ফাইল অন্তর্ভুক্ত করি) যা একটি ইলাস্টিকবিয়ানস্টাল্ক বস্তুটি প্রতিষ্ঠিত করে এবং সমস্ত দৃষ্টান্তের একটি তালিকা পুনরুদ্ধার করে। এটি তালিকার মধ্যে প্রথম সার্ভার ব্যবহার করে এবং এটি নিজের সাথে মেলে কিনা তা পরীক্ষা করে, এটি যদি এটি চালিয়ে যায় তবে অন্যথায় এটি মারা যায় এবং বন্ধ হয়ে যায়। আমি যাচাই করেছি এবং প্রত্যাবর্তিত তালিকাটি সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে, প্রযুক্তিগতভাবে এটি কেবল এক মিনিট বা তার জন্য সামঞ্জস্যপূর্ণ হওয়া দরকার, প্রতিটি উদাহরণ অনুসারে নির্ধারিত ক্রোনটি কার্যকর করে। যদি এটি পরিবর্তিত হয়, তবে এটি কোনও ব্যাপার নয়, যেহেতু আবার এটি কেবল সেই ছোট উইন্ডোর জন্যই প্রাসঙ্গিক।

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

-দেবী


আমি দেখতে পেয়েছি যে পিএইচপি_উনাম ('এন') প্রাইভেট ডিএনএস নামটি (যেমন ip-172.24.55.66) প্রদান করে, যা আপনি খুঁজছেন সেই আইডি নয়। পিএইচপি_উনাম () ব্যবহার করার পরিবর্তে, আমি $instanceId = file_get_contents("http://instance-data/latest/meta-data/instance-id"); এটি ব্যবহার করে শেষ করেছি: তারপরে তুলনা করতে কেবল সেই উদাহরণটি ব্যবহার করুন var
ভালোরাম

4
ইনস্ট্যান্সেস অ্যারে প্রতিটি বর্ণিত কলকে একই ক্রম উপস্থাপন করে এমন কোন গ্যারান্টি আছে? আমি প্রতিটি এন্ট্রির ['আইডি'] ক্ষেত্রটি অ্যারেতে বের করে আনতে এবং পিএইচপি-তে বাছাই করার আগে পরামর্শ দেব, আপনি প্রথমে বাছাই করা এন্ট্রিটি আপনার বর্তমান উদাহরণ আইডি কিনা তা যাচাই করার আগে।
গ্যাব্রিয়েল

এই উত্তরের ভিত্তিতে আমি এই সমাধানটি করেছি: স্ট্যাকওভারফ্লো / প্রশ্ন / ১40০770০৯০ / - এটি খুব সমান তবে এর দ্বিগুণ কার্যকর হওয়ার কোনও সম্ভাবনা নেই।
TheStoryCoder

11

আমি একটি এডাব্লুএস সমর্থন এজেন্টের সাথে কথা বলেছিলাম এবং এটিই আমার পক্ষে কাজ করার জন্য আমরা পেয়েছি। 2015 সমাধান:

আপনার_ফিলি_নাম.কমফিগ দিয়ে আপনার .ebextensions ডিরেক্টরিতে একটি ফাইল তৈরি করুন। কনফিগার ফাইল ইনপুটটিতে:

নথি পত্র:
  "/etc/cron.d/cron_example":
    মোড: "000644"
    মালিক: মূল
    গোষ্ঠী: রুট
    সামগ্রী: |
      * * * * * রুট / ওএসআর / লোকাল / বিন / ক্রোন_এক্স্পেল.শ

  "/usr/local/bin/cron_example.sh":
    মোড: "000755"
    মালিক: মূল
    গোষ্ঠী: রুট
    সামগ্রী: |
      #! / বিন / বাশ

      /usr/local/bin/test_cron.sh || প্রস্থান
      প্রতিধ্বনি "ক্রোন চলছে" `তারিখ` >> /tmp/cron_example.log এ
      # এখন এমন কাজগুলি করুন যা কেবলমাত্র 1 ইভেন্টে চালানো উচিত ...

  "/usr/local/bin/test_cron.sh":
    মোড: "000755"
    মালিক: মূল
    গোষ্ঠী: রুট
    সামগ্রী: |
      #! / বিন / বাশ

      মেটাডাটা = / অপ্ট / অ্যাউজ / বিন / ইসি 2-মেটাডেটা
      INSTANCE_ID = `ET মেটাডাটা -i | awk '{মুদ্রণ $ 2}' `
      অঞ্চল = `ET মেটাডাটা -z | awk 'sub মুদ্রণ সাবস্ট্রিট ($ 2, 0, দৈর্ঘ্য ($ 2) -1)}' `

      # আমাদের অটো স্কেলিং গ্রুপের নামটি সন্ধান করুন।
      ASG = ws aws ec2 বর্ণনা-ট্যাগগুলি - ফিল্টারগুলি "নাম = রিসোর্স-আইডি, মানগুলি = ST INSTANCE_ID" \
        --region $ অঞ্চল - আউটপুট পাঠ্য awk '/ aws: autocaling: groupName / {5}' {মুদ্রণ করুন `

      # গ্রুপে প্রথম উদাহরণটি সন্ধান করুন
      FIRST = ws অটোক্যাসিং-এর বর্ণনা-অটো-স্কেলিং-গ্রুপগুলি - অটো-স্কেলিং-গ্রুপ-নামগুলি $ এএসজি \
        --region $ অঞ্চল - আউটপুট পাঠ্য awk '/ InS सर्विस $ / {মুদ্রণ $ 4}' | সাজানো | মাথা -1`

      # পরীক্ষা যদি তারা একই হয়।
      ["$ FIRST" = "ST INSTANCE_ID"]

আদেশগুলি:
  rm_old_cron:
    কমান্ড: "আরএম * .বাক"
    cwd: "/etc/cron.d"
    অগ্রাহ্যকারী ত্রুটি: সত্য

এই দ্রষ্টব্যটির 2 টি ত্রুটি রয়েছে:

  1. পরবর্তী মোতায়েনের সময়, বিয়ানস্টালক বিদ্যমান ক্রোন স্ক্রিপ্টটির নাম .bak হিসাবে রাখে, তবে ক্রোন এখনও এটি চালাবে। আপনার ক্রোন এখন একই মেশিনে দু'বার কার্যকর করে।
  2. যদি আপনার পরিবেশটি স্কেল আপ হয় তবে আপনি বেশ কয়েকটি দৃষ্টান্ত পান, সবগুলি আপনার ক্রোন স্ক্রিপ্টে চলছে। এর অর্থ আপনার মেল শটগুলি পুনরাবৃত্তি হয় বা আপনার ডাটাবেস সংরক্ষণাগারগুলি সদৃশ হয়

কার্যকারিতা:

  1. কোনও ক্রম তৈরি করে এমন কোনও .ebextensions স্ক্রিপ্ট নিশ্চিত করুন যা পরবর্তী স্থাপনার উপরের .bak ফাইলগুলিও সরিয়ে দেয়।
  2. নিম্নলিখিতগুলির মতো একটি সহায়ক স্ক্রিপ্ট রয়েছে: মেটাটাটা থেকে বর্তমান ইনস্ট্যান্স আইডি পান - ইসি 2 ট্যাগ থেকে বর্তমান অটো স্কেলিং গোষ্ঠীর নাম পান - বর্ণ অনুসারে বাছাই করা সেই গোষ্ঠীর ইসি 2 উদাহরণগুলির তালিকা পান। - তালিকা থেকে প্রথম উদাহরণ নেয়। - পদক্ষেপ 1 থেকে প্রথম দৃষ্টান্ত আইডির সাথে পদক্ষেপ 1 থেকে ইনস্ট্যান্স আইডি তুলনা করুন Your আপনার ক্রোন স্ক্রিপ্টগুলি তখন এই সহায়ক সহায়ক স্ক্রিপ্টটি ব্যবহার করতে হবে কিনা তা নির্ধারণ করতে এটি ব্যবহার করতে পারে।

গুহাত:

  • বিয়ানস্টালক দৃষ্টান্তগুলির জন্য ব্যবহৃত আইএএম রোলটির ইক্য 2 প্রয়োজন: বর্ণনা করুন ট্যাগ এবং অটোক্যাসিং: বর্ণনা অটোস্কেলিং গ্রুপগুলির অনুমতিগুলি
  • যেসব উদাহরণ চয়ন করা হয়েছে সেগুলি হ'ল অটো স্কেলিংয়ের মাধ্যমে ইন সার্ভিস হিসাবে প্রদর্শিত। এর অর্থ এই নয় যে তারা সম্পূর্ণরূপে বুট আপ হয়েছে এবং আপনার ক্রোন চালানোর জন্য প্রস্তুত।

আপনি যদি ডিফল্ট বিনস্টালক ভূমিকা ব্যবহার করেন তবে আপনাকে আইএএম রোলস সেট করতে হবে না।


7

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

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


আপনি কীভাবে ওপস ওয়ার্কস ব্যবহার করে এটি সমাধান করেছেন তা আমাদের বলতে আপত্তি করবে? আপনি কি কাস্টম স্তরগুলি চালাচ্ছেন যা ক্রোন-জব করে?
টমমি

হ্যাঁ, আমার কাছে অ্যাডমিন / ক্রোন স্তর রয়েছে যা কেবল একটি সার্ভারে চলে। আমি একটি কাস্টম কুকবুক সেট আপ করেছি যা আমার সমস্ত ক্রোন জব ধারণ করে। ডাব্লুএসএসের ডকস.এওএস.এমাজন / ডপস ওয়ার্কস / স্লেস্ট / ইউজারগাইড / এর একটি গাইড রয়েছে ।
ডিমানো

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

6

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


এসকিউএস গ্যারান্টি দেয় না কোডটি একবার চালানো হবে। আমি আয়রন সাইটটি পছন্দ করি, আমি এটি পরীক্ষা করে যাচ্ছি।
নাথান এইচ

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

4
@ জামেসএলডে এই প্রশ্নটি বেশ পুরানো। যেহেতু আমি উপরের মন্তব্যটি লিখেছি, এডাব্লুএস চলমান সার্ভারগুলির মধ্যে একজনকে মাস্টার হিসাবে নির্বাচিত করে ইলাস্টিক বিয়ানস্টালকে ক্রোন জবগুলি পরিচালনা করার জন্য একটি মার্জিত উপায় প্রবর্তন করেছিল। এটি বলার পরে মনে হচ্ছে আপনি ক্রোন + মাইএসকিউএলকে একটি কাজের সারি হিসাবে ব্যবহার করছেন না। যদিও আমি কংক্রিটের প্রস্তাবনা দেওয়ার আগে আমার অ্যাপ্লিকেশন সম্পর্কে অনেক কিছু জানতে হবে।
জামেব

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

5

2017: আপনি লারাভেল 5 + ব্যবহার করছেন

এটি কনফিগার করতে আপনার কেবল 2 মিনিট প্রয়োজন:

  • একটি কর্মী স্তর তৈরি করুন
  • লারাভেল-আউজ-ওয়ার্কার ইনস্টল করুন

    composer require dusterio/laravel-aws-worker

  • রুট ফোল্ডারে একটি ক্রোন.আইএমএল যুক্ত করুন:

আপনার অ্যাপ্লিকেশনটির মূল ফোল্ডারে ক্রোন.আইএমএল যুক্ত করুন (এটি আপনার রেপোর একটি অংশ হতে পারে বা আপনি ইবিতে মোতায়েনের আগে এই ফাইলটি যুক্ত করতে পারেন - গুরুত্বপূর্ণ বিষয় হ'ল এই ফাইলটি স্থাপনার সময় উপস্থিত রয়েছে):

version: 1
cron:
 - name: "schedule"
   url: "/worker/schedule"
   schedule: "* * * * *"

এটাই!

আপনার সমস্ত কাজ App\Console\Kernelএখন সম্পাদন করা হবে

বিস্তারিত নির্দেশাবলী এবং ব্যাখ্যা: https://github.com/dusterio/laravel-aws-worker

কীভাবে লারাভেলের ভিতরে টাস্কগুলি লিখতে হবে: https://laravel.com/docs/5.4/schedule


3

এর filesপরিবর্তে আরও পঠনযোগ্য সমাধান container_commands:

নথি পত্র:
  "/etc/cron.d/my_cron":
    মোড: "000644"
    মালিক: মূল
    গোষ্ঠী: রুট
    সামগ্রী: |
      # ওভাররাইড ডিফল্ট ইমেল ঠিকানা
      MAILTO = "উদাহরণ@gmail.com"
      # প্রতি পাঁচ মিনিটে একটি সিমফনি কমান্ড চালান (ইক 2-ব্যবহারকারী হিসাবে)
      * / 10 * * * * ইক 2-ইউজার / ইউএসআর / বিন / পিএইচপি / ভার / অ্যাপ / বর্তমান / অ্যাপ / কনসোল করুন: কিছু
    এনকোডিং: সমতল
আদেশগুলি:
  ইলাস্টিক বিয়ানস্টালকের তৈরি # ব্যাকআপ ফাইল মুছুন
  ক্লিয়ার_ক্রোন_ব্যাকআপ:
    কমান্ড: rm -f /etc/cron.d/watson.bak

নোট করুন যে ফর্ম্যাটটি স্বাভাবিক ক্রন্টব্যাট ফর্ম্যাট থেকে পৃথক হয় যাতে এটি কমান্ডটি চালানোর জন্য ব্যবহারকারীকে নির্দিষ্ট করে।


এখানে একটি সমস্যা হ'ল ইলাস্টিক বিয়ানস্টালক ইসি 2 উদাহরণগুলিতে ডিফল্টরূপে এসএমটিপি পরিষেবাদি সেট আপ করা হয় না তাই এখানে মেল্টোর বিকল্পটি কাজ না করে।
জাস্টিন ফিনকেলস্টেইন

3

2018 এর জন্য আমার 1 শতাংশ অবদান

এটি করার সঠিক উপায় এখানে (ব্যবহার django/pythonএবং django_crontabঅ্যাপ্লিকেশন):

.ebextensionsফোল্ডারের ভিতরে একটি ফাইল তৈরি করুন 98_cron.config:

files:
  "/tmp/98_create_cron.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/sh
      cd /
      sudo /opt/python/run/venv/bin/python /opt/python/current/app/manage.py crontab remove > /home/ec2-user/remove11.txt
      sudo /opt/python/run/venv/bin/python /opt/python/current/app/manage.py crontab add > /home/ec2-user/add11.txt 

container_commands:
    98crontab:
        command: "mv /tmp/98_create_cron.sh /opt/elasticbeanstalk/hooks/appdeploy/post && chmod 774 /opt/elasticbeanstalk/hooks/appdeploy/post/98_create_cron.sh"
        leader_only: true

এর container_commandsপরিবর্তে হওয়া দরকারcommands


2

কেউ নতুন নেতা যখন উত্থাপিত হয় নেত্রী_ কেবলমাত্র অটো স্কেলিং সমস্যা সম্পর্কে ভাবছিলেন। আমি কীভাবে তাদের মন্তব্যে জবাব দিতে পারি তা বুঝতে পারি না তবে এই লিঙ্কটি দেখুন: http://blog.paulopoiati.com/2013/08/25/running-cron-in-elastic-beanstalk-auto-scaling- পরিবেশ /


2

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

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

অন্যান্য তালিকার কয়েকটি, যেমন আপনি তালিকার প্রথম উদাহরণ কিনা তা পরীক্ষা করে নেওয়া আদর্শ নয়। বর্তমানের প্রথম উদাহরণটি বন্ধ করার প্রক্রিয়াতে থাকলে কী হবে?

ইনস্ট্যান্ট সুরক্ষাও ইস্যুগুলির সাথে আসতে পারে - যদি সেই উদাহরণটি লক হয়ে যায় / হিমশীতল হয়?

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

আমরা নিজের পুনর্লিখনের চেষ্টা করার পরিবর্তে বিদ্যমান কার্যকারিতাটিকে পুনরায় আকার দিতে পারি। আপনি এখানে পুরো সমাধানটি দেখতে পাবেন: https://gist.github.com/dorner/4517fe2b8c79ccb3971084ec28267f27

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


2

অ্যামাজনের সর্বশেষতম উদাহরণটি সবচেয়ে সহজ এবং সবচেয়ে দক্ষ (পর্যায়ক্রমিক কাজ):

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ using-features-managing-env-tiers.html

যেখানে আপনি আপনার কোনও ক্রোন জব এক্সিকিউট করার জন্য একটি পৃথক কর্মী স্তর তৈরি করেন। ক্রোন.আইএমএল ফাইল তৈরি করুন এবং এটি আপনার মূল ফোল্ডারে রাখুন। আমার একটি সমস্যা ছিল (ক্রোনটি কার্যকর হচ্ছিল না বলে মনে হচ্ছে) যে আমার কোডপাইপলাইনে ডায়নামডব সংশোধন করার ক্ষমতা নেই। আইএএম -> রোলস -> আপনার পাইপলাইন এবং পুনর্নির্মাণের (ইলাস্টিক বিয়ানস্টালক) এর অধীনে ফুলডাইনামোডিবি অ্যাক্সেস যুক্ত করার পরে এর ভিত্তিতে এটি পুরোপুরি কাজ করেছিল worked


1

সমাধানের সম্পূর্ণ ব্যাখ্যা এখানে দেওয়া হল:

http://blog.paulopoiati.com/2013/08/25/running-cron-in-elastic-beanstalk-auto-scaling-en वातावरण/


ASG এর মধ্যে একটি অনন্য উদাহরণ তৈরি করতে leader_only ব্যবহার করবেন না। এএসজি কখনই গ্যারান্টি দেয় না যে আপনি সেই নির্দিষ্ট উদাহরণটি ধরে রাখতে সক্ষম হবেন তবে এটি কেবল পরিষেবাতে এই সংখ্যার উদাহরণের নিশ্চয়তা দেয়। ইবি স্বাস্থ্য পরীক্ষার ব্যর্থতার কারণে নেতার উদাহরণ শেষ হতে পারে।
এমস্ট

0

স্কেলিংয়ের সময় অটো স্কেলিং কোনও নির্দিষ্ট উদাহরণ বন্ধ করতে পারে কিনা তা নিয়ন্ত্রণ করতে, উদাহরণ সুরক্ষা ব্যবহার করুন। আপনি কোনও অটো স্কেলিং গোষ্ঠীতে বা স্বতন্ত্র স্কেলিংয়ের স্বতন্ত্র উদাহরণগুলিতে সুরক্ষা সেটিংস সক্ষম করতে পারেন। যখন অটো স্কেলিং কোনও উদাহরণ চালু করে, উদাহরণটি অটো স্কেলিং গোষ্ঠীর উদাহরণ সুরক্ষা সেটিংয়ের উত্তরাধিকার সূত্রে প্রাপ্ত হয়। আপনি যে কোনও সময় একটি অটো স্কেলিং গ্রুপ বা একটি অটো স্কেলিং উদাহরণের জন্য উদাহরণ সুরক্ষা সেটিংস পরিবর্তন করতে পারেন।

http://docs.aws.amazon.com/autoscaling/latest/userguide/as-instance-termission.html#instance-protication


0

আমার এটির আর একটি সমাধান ছিল যদি পিএইচপি ফাইলটি ক্রনের মাধ্যমে চালানো দরকার এবং যদি আপনি কোনও NAT উদাহরণ স্থাপন করে থাকেন তবে আপনি NAT উদাহরণে ক্রোনজব লাগিয়ে উইজেটের মাধ্যমে পিএইচপি ফাইল চালাতে পারেন।


0

আপনি পিএইচপি-তে এটি করতে চাইলে এখানে একটি স্থির সমস্যা রয়েছে। এটির মতো কাজ করার জন্য আপনার .ebextensions ফোল্ডারে আপনার কেবল ক্রোনজক.কনফিগ প্রয়োজন।

files:
  "/etc/cron.d/my_cron":
    mode: "000644"
    owner: root
    group: root
    content: |
        empty stuff
    encoding: plain
commands:
  01_clear_cron_backup:
    command: "rm -f /etc/cron.d/*.bak"
  02_remove_content:
    command: "sudo sed -i 's/empty stuff//g' /etc/cron.d/my_cron"
container_commands:
  adding_cron:
    command: "echo '* * * * * ec2-user . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/app/current/index.php cron sendemail > /tmp/sendemail.log 2>&1' > /etc/cron.d/my_cron"
    leader_only: true

envvars ফাইলগুলির জন্য পরিবেশের ভেরিয়েবলগুলি পায়। আপনি উপরের হিসাবে tmp / sendemail.log এ আউটপুট ডিবাগ করতে পারেন।

আশা করি এটি কাউকে অবশ্যই সহায়তা করেছে যেমন এটি আমাদের সহায়তা করেছিল!


0

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

চলমান দৃষ্টান্তগুলি না দেখে (এবং আপনার এডাব্লুএস কী এবং গোপনীয়তা সংরক্ষণ করার জন্য) আমি মাইএসকিউএল ডাটাবেসটি ব্যবহার করছি যা আমি ইতিমধ্যে সমস্ত দৃষ্টান্ত থেকে সংযোগ করছি ing

এটির কোনও ডাউনসাইড নেই, কেবল ইতিবাচক:

  • কোন অতিরিক্ত উদাহরণ বা ব্যয়
  • রক সলিড সলিউশন - ডাবল এক্সিকিউশন হওয়ার কোনও সম্ভাবনা নেই
  • স্কেলযোগ্য - স্বয়ংক্রিয়ভাবে আপনার উদাহরণগুলি নীচে এবং নীচে স্কেল করা হিসাবে কাজ করে
  • ফেলওভার - কোনও উদাহরণের ব্যর্থতার ক্ষেত্রে স্বয়ংক্রিয়ভাবে কাজ করে

বিকল্পভাবে, আপনি একটি ডাটাবেসের পরিবর্তে একটি সাধারণভাবে ভাগ করা ফাইল সিস্টেম ( এনডুএস প্রোটোকলের মাধ্যমে এডাব্লুএস ইএফএসের মতো ) ব্যবহার করতে পারেন।

নিম্নলিখিত সমাধানটি পিএইচপি ফ্রেমওয়ার্কের মধ্যে তৈরি করা হয়েছে Yii তবে আপনি সহজেই এটি অন্য ফ্রেমওয়ার্ক এবং ভাষার জন্য মানিয়ে নিতে পারেন। এছাড়াও ব্যতিক্রম হ্যান্ডলারটি Yii::$app->systemআমার নিজস্ব একটি মডিউল। আপনি যা ব্যবহার করছেন তা দিয়ে এটি প্রতিস্থাপন করুন।

/**
 * Obtain an exclusive lock to ensure only one instance or worker executes a job
 *
 * Examples:
 *
 * `php /var/app/current/yii process/lock 60 empty-trash php /var/app/current/yii maintenance/empty-trash`
 * `php /var/app/current/yii process/lock 60 empty-trash php /var/app/current/yii maintenance/empty-trash StdOUT./test.log`
 * `php /var/app/current/yii process/lock 60 "empty trash" php /var/app/current/yii maintenance/empty-trash StdOUT./test.log StdERR.ditto`
 * `php /var/app/current/yii process/lock 60 "empty trash" php /var/app/current/yii maintenance/empty-trash StdOUT./output.log StdERR./error.log`
 *
 * Arguments are understood as follows:
 * - First: Duration of the lock in minutes
 * - Second: Job name (surround with quotes if it contains spaces)
 * - The rest: Command to execute. Instead of writing `>` and `2>` for redirecting output you need to write `StdOUT` and `StdERR` respectively. To redirect stderr to stdout write `StdERR.ditto`.
 *
 * Command will be executed in the background. If determined that it should not be executed the script will terminate silently.
 */
public function actionLock() {
    $argsAll = $args = func_get_args();
    if (!is_numeric($args[0])) {
        \Yii::$app->system->error('Duration for obtaining process lock is not numeric.', ['Args' => $argsAll]);
    }
    if (!$args[1]) {
        \Yii::$app->system->error('Job name for obtaining process lock is missing.', ['Args' => $argsAll]);
    }

    $durationMins = $args[0];
    $jobName = $args[1];
    $instanceID = null;
    unset($args[0], $args[1]);

    $command = trim(implode(' ', $args));
    if (!$command) {
        \Yii::$app->system->error('Command to execute after obtaining process lock is missing.', ['Args' => $argsAll]);
    }

    // If using AWS Elastic Beanstalk retrieve the instance ID
    if (file_exists('/etc/elasticbeanstalk/.aws-eb-system-initialized')) {
        if ($awsEb = file_get_contents('/etc/elasticbeanstalk/.aws-eb-system-initialized')) {
            $awsEb = json_decode($awsEb);
            if (is_object($awsEb) && $awsEb->instance_id) {
                $instanceID = $awsEb->instance_id;
            }
        }
    }

    // Obtain lock
    $updateColumns = false;  //do nothing if record already exists
    $affectedRows = \Yii::$app->db->createCommand()->upsert('system_job_locks', [
        'job_name' => $jobName,
        'locked' => gmdate('Y-m-d H:i:s'),
        'duration' => $durationMins,
        'source' => $instanceID,
    ], $updateColumns)->execute();
    // The SQL generated: INSERT INTO system_job_locks (job_name, locked, duration, source) VALUES ('some-name', '2019-04-22 17:24:39', 60, 'i-HmkDAZ9S5G5G') ON DUPLICATE KEY UPDATE job_name = job_name

    if ($affectedRows == 0) {
        // record already exists, check if lock has expired
        $affectedRows = \Yii::$app->db->createCommand()->update('system_job_locks', [
                'locked' => gmdate('Y-m-d H:i:s'),
                'duration' => $durationMins,
                'source' => $instanceID,
            ],
            'job_name = :jobName AND DATE_ADD(locked, INTERVAL duration MINUTE) < NOW()', ['jobName' => $jobName]
        )->execute();
        // The SQL generated: UPDATE system_job_locks SET locked = '2019-04-22 17:24:39', duration = 60, source = 'i-HmkDAZ9S5G5G' WHERE job_name = 'clean-trash' AND DATE_ADD(locked, INTERVAL duration MINUTE) < NOW()

        if ($affectedRows == 0) {
            // We could not obtain a lock (since another process already has it) so do not execute the command
            exit;
        }
    }

    // Handle redirection of stdout and stderr
    $command = str_replace('StdOUT', '>', $command);
    $command = str_replace('StdERR.ditto', '2>&1', $command);
    $command = str_replace('StdERR', '2>', $command);

    // Execute the command as a background process so we can exit the current process
    $command .= ' &';

    $output = []; $exitcode = null;
    exec($command, $output, $exitcode);
    exit($exitcode);
}

এটি আমি ব্যবহার করছি ডেটাবেস স্কিমা:

CREATE TABLE `system_job_locks` (
    `job_name` VARCHAR(50) NOT NULL,
    `locked` DATETIME NOT NULL COMMENT 'UTC',
    `duration` SMALLINT(5) UNSIGNED NOT NULL COMMENT 'Minutes',
    `source` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`job_name`)
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.