পুনরায় চালু করার প্রত্যয় দেওয়ার আগে এক্স সেকেন্ড অপেক্ষা করার জন্য আমি কীভাবে সুপারভাইজার পরিচালিত প্রোগ্রামটি কনফিগার করব?


9

আমি একটি কর্মী প্রক্রিয়া পেয়েছি যা একবারে 1 টি খরগোশ মেসেজ প্রসেস করে। এই মুহুর্তে, শ্রমিকটি প্রস্থান করার সাথে সাথে তত্ত্বাবধায়ক এটি পুনরায় চালু করছে (যা পরবর্তী বার্তায় প্রক্রিয়া করবে)।

আমি একটি বিরতি এক্স সেকেন্ড সেট করতে চাই, যাতে সুপারভাইজার অনাক্রম্যভাবে পুনরায় আরম্ভ না করে, তবে অন্য কর্মী শুরুর আগে এটি একটি নির্দিষ্ট সময়ের জন্য অপেক্ষা করে।

এটা কি সম্ভব? কিভাবে?

উত্তর:


11

সুপারভাইজার প্রোগ্রাম বিভাগে অন্তর নির্দিষ্ট করার কোনও উপায় নেই তবে আপনি যা করতে পারেন তা আপনার কোডটিতে "ঘুম ()" রেখে দেওয়া হবে যাতে প্রোগ্রামটি বার্তা প্রসেসিংয়ের সাথে শেষ হওয়ার পরে নির্দিষ্ট সময়ের জন্য অপেক্ষা করে।

আপনি যদি না চান / প্রোগ্রামের কোডটি পরিবর্তন করতে না পারেন, আপনি এটিকে ব্যাশ স্ক্রিপ্টে মোড়ানোর চেষ্টা করতে পারেন, উদাহরণস্বরূপ:

#!/bin/bash
/usr/local/bin/myprogram
sleep 30

এবং সেই স্ক্রিপ্টটি চালানোর জন্য আপনার তত্ত্বাবধায়ক প্রোগ্রাম বিভাগটিকে আপনার প্রোগ্রামের পরিবর্তে পরিবর্তন করুন:

command=/usr/local/bin/myprogram.sh

ঘুমানো কার্যকর হবে না যতক্ষণ না / ইউএসআর / স্থানীয় / বিন / মাইপ্রোগ্রাম না ফেরায়?
লুস্ট্রো

ঠিক ঠিক, মাইপ্রোগ্রামটি বের হওয়ার পরে কেবল ঘুম গণনা শুরু করবে।
জাকভ সোসিক

একটি সমস্যা হ'ল এই স্ক্রিপ্টটি বিশেষত TERM সংকেতগুলি পরিচালনা করে না ER
টর্স্টেন ব্রোঞ্জার

9

ডকার পাত্রে ভিতরে কোনও কমান্ড চালানোর জন্য আমার একটি সহজ উপায় দরকার ছিল, যেখানে ক্রোন নেই। আমি যা ব্যবহার করছি তা এখানে:

[program:runevery]
directory = /my/workdir
command = sh -c "sleep 5;date >>/root/test.ts"
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile = /var/log/supervisor/%(program_name)s.log
autorestart = true
startsecs = 0
exitcodes = 0,1,2

স্টার্টসেকস = 0 নিশ্চিত করে যে সুপারভাইজারটি মনে করে যে কমান্ডটি কয়েক সেকেন্ড পরেও বেরিয়ে গেলেও কমান্ডটি সফলভাবে শুরু হয়েছিল। অন্যথায় সুপারভাইজার এটি লুপের মধ্যে রয়েছে ভেবে এটি পুনরায় চালু করা বন্ধ করবে।

উপরের উদাহরণ সহ আপনি /root/date.ts এ যা দেখবেন তা এখানে:

# tail -f /root/test.ts 
Tue Nov 17 20:42:58 UTC 2015
Tue Nov 17 20:43:04 UTC 2015
Tue Nov 17 20:43:10 UTC 2015
[...]

আপনার পছন্দ অনুযায়ী ঘুম টিউন করুন এবং আপনার প্রয়োজন অনুযায়ী 'তারিখ >> / রুট / টেস্ট.টিস' প্রতিস্থাপন করুন।

আপনি যদি প্রতি মিনিটের চেয়ে বেশি বার ক্রোনজব চালাতে চান তবে এই সমাধানটিও কার্যকর।


চতুর সমাধানের জন্য +1। আমি অনুরূপ কিছু করতে চাই। দুর্ভাগ্যক্রমে, এটি আমার পক্ষে কার্যকর হয় না কারণ আমাকে আরপিসি কল ব্যবহার করে শ্রোতার কাছে প্রস্থান কোড নেওয়া দরকার। দুর্ভাগ্যক্রমে, সুপারভাইজারটি প্রস্থান করার সাথে সাথেই প্রোগ্রামটি পুনরায় চালু করে কোড 0 তৈরি করে দীর্ঘশ্বাস ফেলবে ... অন্য কোনও ধারণা?
ওয়ানমা

0
[program:yourapp]
command = bash -c "sleep 60 && exec urcmd'
startsecs = 65 ; 

এবং তারপর

supervisorctl -c your_config_file reload

1. আপনার execকমান্ডটি ব্যবহার করা দরকার , অন্যথায় এটি একটি উপ-প্রজেক্টকে কাঁটাচামচ করবে sleep 60 && exec your commandএবং আপনার অগ্রগতি নীচের মত হবে

$ ps -ef|grep urcmd
work      1818  1698  0 17:35 ?        00:00:00 bash -c sleep 60 && urcmd
work      3872  1818  0 17:36 ?        00:00:00 urcmd

এবং তারপরে আপনি যখন ব্যবহার করবেন supervisorctl ইউআরপি বন্ধ করবেন 1818 অগ্রগতি থামিয়ে 3838 অনাথ অগ্রগতি ছেড়ে যাবেন

2. স্টার্টসেকগুলি স্লিপ সেকেন্ডের চেয়ে 5 টির চেয়ে বেশি পরিবর্তন করার প্রস্তাব দেওয়া হয়েছে, তারপরে আপনি যখন এই অ্যাপটি শুরু করবেন এবং স্থিতিটি যাচাই করবেন, তখন এটি আপনাকে শুরু করবে যে এটি শুরু করছে

$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp                          STARTING  
otherapp                       RUNNING   pid 13502, uptime 0:00:55

$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp                          RUNNING   pid 13503, uptime 0:00:05
otherapp                       RUNNING   pid 13502, uptime 0:00:65

অন্যথায় যদি আপনি স্লিপ সেকেন্ডের চেয়ে কম মান সেট করেন, আপনি যখন অ্যাপ্লিকেশনটি শুরু করেন এবং স্থিতিটি পরীক্ষা করেন, আপনি একটি চলমান স্থিতি পাবেন, তবে এটি বাস্তব নির্বাহের আগে এখনও সেন্টিমিড ঘুমিয়ে আছে

৩. আপনি যখন আপনার কনফিগারেশন ফাইলটি পরিবর্তন করেন, আপনাকে পুনরায় লোড সেমিডি ব্যবহার করতে হবে বা এটি কাজ করতে আপনার সুপারভাইজারকে পুনরায় চালু করতে হবে

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