معرفی

در بسیاری از محیط‌های VPS، معمولاً تعدادی برنامه کوچک خواهید داشت که می‌خواهید دائماً اجرا کنید، چه اسکریپت‌های پوسته کوچک، برنامه‌های Node.js یا هر بسته‌ای با اندازه بزرگ.

معمولاً بسته‌های خارجی با یک فایل واحد عرضه می‌شوند که به آنها اجازه می‌دهد توسط یک سیستم init مانند systemd مدیریت شوند یا به‌عنوان تصاویر docker بسته‌بندی شوند که می‌توانند توسط یک موتور کانتینر مدیریت شوند. با این حال، برای نرم افزارهایی که به خوبی بسته بندی نشده اند، یا برای کاربرانی که ترجیح می دهند با سیستم init سطح پایین روی سرور خود تعامل نداشته باشند، داشتن یک جایگزین سبک مفید است.

Supervisor یک مدیر فرآیند است که یک رابط منحصر به فرد برای مدیریت و نظارت بر تعدادی از برنامه های طولانی مدت ارائه می دهد. در این آموزش، Supervisor را بر روی یک سرور لینوکس نصب می‌کنید و یاد می‌گیرید که چگونه تنظیمات Supervisor را برای چندین برنامه مدیریت کنید.

پیش نیازها

برای تکمیل این راهنما، شما نیاز دارید:

  • یک سرور لینوکس و یک کاربر غیر ریشه با امتیازات sudo.

مرحله 1 – نصب

با نصب Supervisor شروع کنید:

sudo apt install supervisor

سرویس سرپرست پس از نصب به طور خودکار اجرا می شود. می توانید وضعیت آن را بررسی کنید:

sudo systemctl status supervisor

شما باید خروجی زیر را دریافت کنید:

Output
● supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

اکنون که Supervisor را نصب کرده ایم، می توانیم اولین برنامه های خود را اضافه کنیم.

مرحله 2 – اضافه کردن یک برنامه

بهترین روش برای کار با Supervisor نوشتن یک فایل پیکربندی برای هر برنامه ای است که مدیریت می کند.

به منظور نشان دادن عملکرد Supervisor، ما یک اسکریپت پوسته ایجاد می کنیم که کاری جز تولید یک خروجی قابل پیش بینی در ثانیه انجام نمی دهد، اما به طور مداوم در پس زمینه اجرا می شود تا زمانی که به صورت دستی متوقف شود. با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایلی به نام idle.sh را در فهرست اصلی خود باز کنید:

nano ~/idle.sh

مطالب زیر را اضافه کنید:

~/idle.sh
#!/bin/bash
while true
do
    # Echo current date to stdout
    echo `date`
    # Echo 'error!' to stderr
    echo 'error!' >&2
    sleep 1
done

ذخیره کنید و فایل را ببندید. اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و Enter را فشار دهید.

بعد، اسکریپت خود را قابل اجرا کنید:

chmod +x ~/idle.sh

فایل های پیکربندی هر برنامه برای برنامه های Supervisor در دایرکتوری /etc/supervisor/conf.d قرار دارند، معمولاً یک برنامه در هر فایل اجرا می شود و به .conf ختم می شود. ما یک فایل پیکربندی برای این اسکریپت به عنوان`/etc/supervisor/conf.d/idle.conf ایجاد می کنیم:

sudo nano /etc/supervisor/conf.d/idle.conf

این مطالب را اضافه کنید:

/etc/supervisor/conf.d/idle.conf
command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

این را خط به خط مرور می کنیم:

command=/home/ubuntu/idle.sh

پیکربندی با تعریف برنامه ای با نام بیکار و مسیر کامل برنامه شروع می شود:

autostart=true
autorestart=true

دو خط بعدی رفتار خودکار اسکریپت را تحت شرایط خاصی تعریف می کند.

گزینه autostart به Supervisor می گوید که این برنامه باید هنگام بوت شدن سیستم راه اندازی شود. تنظیم این مورد روی false به شروع دستی پس از خاموش شدن سیستم نیاز دارد.

autorestart تعریف می کند که چگونه Supervisor باید برنامه را در صورت خروج از آن مدیریت کند:

false به Supervisor می‌گوید که پس از خروج برنامه هرگز آن را مجددا راه‌اندازی نکند.
true به Supervisor می گوید که همیشه برنامه را پس از خروج مجدداً راه اندازی کند.
unexpected به Supervisor می گوید که فقط در صورتی برنامه را مجدداً راه اندازی کند که با یک کد خطای غیرمنتظره (به طور پیش فرض هر چیزی غیر از کدهای 0 یا 2) خارج شود. برای کسب اطلاعات بیشتر در مورد کدهای خطا، به دستور errno نگاه کنید.

stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

دو خط پایانی مکان دو فایل لاگ اصلی را برای برنامه مشخص می کند. همانطور که توسط نام گزینه پیشنهاد می شود، stdout و stderr به ترتیب به مکان های stdout_logfile و stderr_logfile هدایت می شوند. دایرکتوری های مشخص شده باید از قبل وجود داشته باشند، زیرا Supervisor سعی نخواهد کرد هیچ دایرکتوری گمشده ای ایجاد کند.

پیکربندی که ما در اینجا ایجاد کرده ایم یک الگوی حداقلی برای یک برنامه Supervisor است. اسناد Supervisor بسیاری از گزینه های پیکربندی اختیاری دیگر را فهرست می کند که برای تنظیم نحوه اجرای برنامه ها در دسترس هستند.

هنگامی که فایل پیکربندی ما ایجاد و ذخیره شد، می توانیم از طریق دستور supervisorctl برنامه جدید خود را به Supervisor اطلاع دهیم. ابتدا به Supervisor می‌گوییم که به دنبال تنظیمات برنامه جدید یا تغییر یافته در فهرست /etc/supervisor/conf.d با استفاده از:

sudo supervisorctl reread

Output
idle: available

هر زمان که تغییری در هر فایل پیکربندی برنامه ایجاد می کنید، اجرای دو دستور قبلی تغییرات را اعمال می کند.

در این مرحله برنامه ما اکنون باید در حال اجرا باشد. ما می توانیم خروجی آن را با مشاهده فایل گزارش خروجی بررسی کنیم:

sudo tail /var/log/idle.out.log

Output
Sat Nov 20 22:21:22 UTC 2021
Sat Nov 20 22:21:23 UTC 2021
Sat Nov 20 22:21:24 UTC 2021
Sat Nov 20 22:21:25 UTC 2021
Sat Nov 20 22:21:26 UTC 2021
Sat Nov 20 22:21:27 UTC 2021
Sat Nov 20 22:21:28 UTC 2021
Sat Nov 20 22:21:29 UTC 2021
Sat Nov 20 22:21:30 UTC 2021
Sat Nov 20 22:21:31 UTC 2021

در مرحله بعد، برخی دیگر از کاربردهای Supervisor را پوشش خواهیم داد.

مرحله 3 – مدیریت برنامه ها

فراتر از اجرای برنامه‌ها، می‌خواهید توقف، راه‌اندازی مجدد یا وضعیت آنها را ببینید. برنامه supervisorctl که در مرحله 2 از آن استفاده کردیم، یک حالت تعاملی نیز دارد که می توانیم از آن برای کنترل برنامه های خود استفاده کنیم.

برای وارد شدن به حالت تعاملی، supervisorctl را بدون آرگومان اجرا کنید:

sudo supervisorctl

supervisorctl در ابتدا وضعیت و زمان آپدیت تمام برنامه های پیکربندی شده را چاپ می کند و سپس خط فرمان آن را چاپ می کند. با وارد کردن راهنما، تمام دستورات موجود آن آشکار می‌شود:

supervisor> help

Output
default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

شما می توانید یک برنامه را با دستورات مرتبط به دنبال نام برنامه شروع یا متوقف کنید:

supervisor> stop idle

Output
idle: stopped

supervisor> start idle

Output
idle: started

با استفاده از دستور tail، می‌توانید آخرین ورودی‌های فهرست‌های stdout و stderr را برای برنامه خود مشاهده کنید:

supervisor> tail idle

Output
Sun Nov 21 00:36:10 UTC 2021
Sun Nov 21 00:36:11 UTC 2021
Sun Nov 21 00:36:12 UTC 2021
Sun Nov 21 00:36:13 UTC 2021
Sun Nov 21 00:36:14 UTC 2021
Sun Nov 21 00:36:15 UTC 2021
Sun Nov 21 00:36:17 UTC 2021

supervisor> tail idle stderr

Output
error!
error!
error!
error!
error!
error!
error!

با استفاده از وضعیت می توانید پس از ایجاد هر گونه تغییر، وضعیت اجرای فعلی هر برنامه را دوباره مشاهده کنید:

supervisor> status

Output
idle                      STOPPED    Nov 21 01:07 AM

در نهایت، می‌توانید با Ctrl+C یا با وارد کردن quit در فرمان از supervisorctl خارج شوید:

supervisor> quit

نتیجه

در این آموزش نحوه نصب و مدیریت Supervisor را یاد گرفتید. همانطور که گفته شد، Supervisor با استانداردهای مدرن بسیار سبک وزن است، اما همچنان به خوبی نگهداری می شود و می تواند ابزار مفیدی برای استقرارهای کوچکتر باشد. همچنین روشی کم‌معنا و خودکفایی برای تولید لاگ‌ها به‌عنوان بخشی از یک استقرار بزرگ‌تر است.

اگر چندین برنامه کوچک را اجرا می کنید که نیاز به دسترسی به وب دارند، ممکن است بخواهید درباره پیکربندی Nginx به عنوان یک پروکسی معکوس نیز مطالعه کنید، که یکی دیگر از اجزای اساسی استقرارهای کوچک و قابل استفاده مجدد است.


سرور مجازی آلمان

سرور مجازی آمریکا

سرور مجازی فرانسه

سرور مجازی کانادا

سرور مجازی لهستان

سرور مجازی هلند

سرور مجازی انگلیس

 

برچسب‌ها:, , , , , , ,