Ukieweb

Diary

I write here what I learn

Supervisor - process control system

Supervisor - process control system

সবাই কেমন আছেন? ঈদের ছুটি শেষে ইতিমধ্যে সবাই কর্মস্থলে যোগ দিয়েছেন হয়তো। জমিয়ে কাজ শুরু করার পূর্বেই চলুন একটা মজার টপিক নিয়ে পড়াশুনা করা যাক। আমাদের প্রায়ই বড় কোনো এপ্লিকেশনে কাজ করতে গেলে সিস্টেমে কিছু প্রোসেস রান করতে হয়, আর সেই রানকৃত প্রোসেস গুলো মনিটরও করতে হয়। আর এ কাজটি যথেষ্টই প্যারাদায়ক। কিন্তু আপনার এই প্যারাময় জীবনে শান্তি দিতে চলে এসেছে নাটরের বনলতা সেন, অপস Supervisor.

Supervisor কি

Supervisor এর অফিসিয়াল সাইটের কথা গুলো থেকে বললে, Supervisor হলো একটি প্রোসেস কন্ট্রোল সিস্টেম যা একাধিক প্রোসেসকে মনিটর ও কন্ট্রোল করতে পারে। এটি Unix-like অপারেটিং সিস্টেমর জন্য কাজ করে, যেমনঃ Ubuntu, Debian, CentOS, MacOS ইত্যাদি।

Supervisor কি কাজ করে

মাঝে মাঝেই হয়তো আপনাকে সার্ভারে কিছু প্রোসেস রান করতে হয় এবং একটি লম্বা সময় সেই প্রোসেসটি একটিভ রাখতে হয়, এটি খুব সহজ কাজ নয়। হয়তো আপনি একটি স্ক্রিপ্ট লিখে প্রসেস গুলো রান করে দিতে পারবেন কিন্তু সেটি কোনো ত্রুটির জন্য বন্ধ হয়ে গেছে কিনা বা সেটি কাজ করছে কিনা সেটা আপনার পক্ষ মনিটর করা সম্ভব হয়না। ঠিক এই কাজটিই যদি আপনি অটোমেশন করতে চান তবে Supervisor এর জুড়ি নেই। যেমন, VPS সিস্টেমে প্রায়সই NodeJS সার্ভার রান করে রাখতে হয় দির্ঘসময়ের জন্য অথবা Queue Worker রান করে রাখতে হয়। কিন্তু সেটিকে সার্বক্ষনিক মনিটর করা আমাদের পক্ষে সম্ভব নয়, ঠিক তখনই আপনি এই কাজটি Supervisor কে দিয়ে দিতে পারেন। Supervisor কে প্রোসেস মনিটরিং এর অপদেবতাও(daemon) বলা হয়, কারন দেবতা যেমন ঘুমায় না ঠিক তেমনি Supervisor ও একমূহুর্তের জন্য চোখ বন্ধ না করে আপনার দেয়া প্রোসেসগুলোর দিকে সার্বক্ষনিক নজর রাখে।

তাহলে চলুন দেখি কিভাবে Supervisor ব্যবহার করবেন। আমরা এখানে Linux সিস্টেমের জন্য কাজ করবো।

Installation

Debian ডিস্ট্রো গুলোতে নিচের apt দিয়েই ইনস্টল করতে পারবেন নিচের মতো করে

$ sudo apt-get update
$ sudo apt-get install supervisor

অথবা আপনি pip দিয়েও ইন্সটল করতে পারেন

$ pip install supervisor

Configuration

Debian ভিত্তিক সিস্টেমে কনফিগারেশন ডাটা /etc/supervisor/supervisor.conf ফাইলে থাকে, আর MacOS এ থাকে /usr/local/etc/supervisord.conf ফাইলে এবং অন্য ডিস্ট্রোগুলোতে /etc/supervisor.conf ফাইলে থাকতে পারে।

Process Monitor

চলুন আমরা আমাদের প্রথম কোনো একটি প্রোসেস মনিটরের জন্য কনফিগার ফাইল লিখি। আমরা এইখানে একটি node সার্ভার রান করাবো ও এর প্রোসেস মনিটর করবো। ধরুন আমাদের node সার্ভার ফাইলের নাম server.js. Supervisor এর সার্ভিস কনফিগারেশন লেখার জন্য নিচের কমান্ড টি চালাই

$ sudo touch /etc/supervisor/conf.d/startnode.conf 

এতে করে /etc/supervisor/conf.d ডিরেক্টরীতে startnode.conf নামে একটি কনফিগারেশন ফাইল তৈরী হবে। এখানে মনে রাখবেন একেকটি সার্ভিস কনফিগারেশন ফাইল একেকটি প্রোসেসকে মনিটর করে। এবার উক্ত ফাইলটি কোনো একটি Text Editor এ ওপেন করুন।

[program:node-worker]
process_name=%(program_name)s_%(process_num)02d
command=node run /path/to/server.js
autostart=true
autorestart=true
user=username
redirect_stderr=true
stdout_logfile=/path/to/project/supervisor.log

এবার আমরা Supervisor কে এই কনফিগারেশন ফাইল রিড করাবো।

$ sudo supervisorctl reread

এবং কনফিগারেশন গুলোকে আপডেট করবো

$ sudo supervisorctl update

ব্যাস আপনার তৈরীকৃত কোড এখন node কে স্টার্ট করে দিয়েছে এবং একে মনিটর করছে। যদি কোনো কারনে এই প্রোসেসটি বন্ধ হয়ে যায় তবে Supervisor এটিকে সয়ংক্রিয়ভাবে স্টার্ট করে দিবে।

যদি কোনো কারনে আপনার কনফিগারেশন ফাইলটি পরিবর্তন করতে হয় তবে পরিবর্তনের পরে উপরের কমান্ড দুটি রান করবেন। তাহলে চেন্জগুলো এফেক্ট করবে।

আর এই প্রোসেস চলার সময় সকল ধরনে error এর লগগুলো পাবেন /path/to/project/supervisor.log ফাইলটিতে।

Active Process গুলো দেখা

আপনি যদি জানতে চান Supervisor কোন কোন প্রোসেসগুলো মনিটর করছে তাহলে নিচের কমান্ডটি চালান

$ supervisorctl

node-worker                      RUNNING    pid 12614, uptime 1:49:37
supervisor>

Process বন্ধ করা

আপনি যদি কোনো এক্টিভ প্রোসেসকে বন্ধ করতে চান তবে supervisorctl থেকে নিচের কমান্ডটি চালান

supervisor> stop process_name

Supervisor Control বন্ধ করা

আপনি যদি Supervisor Control Shell থেকে বের হয়ে আসতে চান তবে নিচের কমান্ডটি চালান

supervisor> quit

Supervisor সম্পর্কে বিস্তারিত এখানে পাবেন http://supervisord.org/index.html

তো এই ছিলো Supervisor সম্পর্কে বেসিক কিছু কথাবার্তা। আশা করি এখন থেকে এটি আপনার সিস্টেমে ইমপ্লিমেন্ট করতে পারবেন।

ধন্যবাদ :)

0 Comments

To make a comment you have to login