PCP-CHECK(1) General Commands Manual PCP-CHECK(1)

pcp-check - مدیریت پیکربندی مؤلفه‌های اختیاری PCP

$pcp-check [-a] [-d] [-l] [-n] [-s] [-v] [-x] [component ...]
$pcp-check [-a] [-c script]] [-d] [-l] [-n] [-s] [-v] [-x]
$PCP_BINADM_DIR/pmcheck ...

مجموعهٔ Performance Co-Pilot (PCP) شامل تعدادی مؤلفهٔ اصلی است که احتمالاً از پیش پیکربندی شده و فعال هستند، اما همچنین شامل تعداد بیشتری مؤلفه است که به‌طور پیش‌فرض فعال نیستند. در چارچوب pmcheck این مؤلفه‌ها شامل سرویس‌هایی هستند که معمولاً در حین فرایند راه‌اندازی (بوت) سیستم آغاز می‌شوند؛ مانند pmcd(1)، pmlogger(1)، pmproxy(1) و غیره؛ یا کارگزاران اختیاری دامنهٔ سنجه‌های کارایی (PMDAها) که معیارهای کارایی موجود و ارائه‌شده توسط pmcd(1) را گسترش می‌دهند.

ابزار pmcheck امکان بررسی و پرس‌وجوی وضعیت مؤلفه‌ها را با گزینهٔ -s یا --state فراهم می‌کند. مؤلفه‌ها می‌توانند با گزینهٔ -a یا --activate فعال شده، یا با گزینهٔ -d یا --deactivate غیرفعال شوند. این سه گزینه در هر بار اجرای دستور pmcheck ناسازگار با یکدیگر (مانعة‌الجمع) هستند و در صورت عدم استفاده از هر یک از آن‌ها، گزینهٔ -s به‌عنوان پیش‌فرض در نظر گرفته می‌شود.

مجموعهٔ مؤلفه‌هایی که باید بررسی یا پیکربندی شوند با نام یا نام‌های component از طریق خط فرمان تعیین می‌شوند؛ در غیر این صورت و در صورت عدم وجود هرگونه آرگومان component، تمام مؤلفه‌های شناخته‌شده در نظر گرفته می‌شوند. هنگامی که یک یا چند آرگومان component مشخص شود، این آرگومان‌ها اختیاری می‌توانند الگوهای sh(1) (تطبیق glob) باشند که با نام‌های مؤلفه‌های شناخته‌شده مطابقت داده می‌شوند.

گزینهٔ -l یا --list مؤلفه‌های شناخته‌شده را گزارش می‌دهد. با تعیین یک یا چند component وضعیت هر یک از آن‌ها گزارش می‌شود. بدون هیچ آرگومان component، گزینهٔ -l تمام مؤلفه‌های شناخته‌شده را فهرست می‌کند که در واقع تمامی اسکریپت‌های مؤلفه (بخش COMPONENT SCRIPTS در ادامه را ببینید) ذخیره‌شده در دایرکتوری $PCP_SHARE_DIR/lib/pmcheck هستند. اگر گزینهٔ -v نیز استفاده شود، یک توضیح کوتاه از هر مؤلفهٔ درخواست‌شده نیز نمایش داده خواهد شد.

مؤلفه‌های اضافی می‌توانند در چارچوب pmcheck ادغام شوند، و گزینهٔ -c یا --file اجازه می‌دهد یک script جایگزین در sh(1) به جای اسکریپت مرتبط با یک component شناخته‌شده مورد استفاده قرار گیرد.

در ترکیب با گزینه‌های -a یا -d، گزینهٔ -n یا --show-me یک اجرای آزمایشی (dry run) انجام می‌دهد، به این ترتیب که دستورهای sh(1) را که برای انجام پیکربندی مجدد لازم هستند نمایش می‌دهد، اما هیچ‌گونه پیکربندی مجددی انجام نمی‌شود. دستورهایی که باید با دسترسی «root» اجرا شوند با پیشوند # و سایر دستورها با پیشوند $ نمایش داده می‌شوند.

گزینهٔ -v یا --verbose میزان جزئیات گزارش را افزایش می‌دهد.

گزینهٔ -x یا --trace می‌تواند برای تعیین اجرای اسکریپت‌های مؤلفه با گزینهٔ -x در sh(1) استفاده شود. این کار می‌تواند به اشکال‌زدایی خطاهای یک اسکریپت مؤلفه یا در حین توسعهٔ یک اسکریپت مؤلفهٔ جدید کمک کند؛ که احتمالاً همراه با استفاده از گزینهٔ -c در pmcheck خواهد بود.

گزینهٔ -? یا --help پیام راهنمای نحوهٔ استفاده را نمایش می‌دهد.

برای سهولت، pmcheck یک نام مستعار برای pcp-check است..SH "اسکریپت‌های مؤلفه (COMPONENT SCRIPTS)" چارچوب pmcheck توسعه‌پذیر است، زیرا مجموعهٔ مؤلفه‌های شناخته‌شده توسط نام اسکریپت‌های مؤلفه در دایرکتوری $PCP_SHARE_DIR/lib/pmcheck تعریف می‌شود.

هر اسکریپت مؤلفه برای ادغام درست با pmcheck باید از قواعد زیر پیروی کند:

  • اسکریپت با sh(1) اجرا خواهد شد؛ اگر به زبان اسکریپت‌نویسی دیگری نیاز دارید، باید یک پوشش (wrapper) در sh(1) ارائه دهید.
  • از آنجا که هر اسکریپت مسئول یک مؤلفه است، نام مؤلفه به‌طور ضمنی مشخص است؛ با این حال نام مؤلفه از طرف pmcheck به‌عنوان تنها آرگومان پس از گزینه‌ها نیز فرستاده می‌شود. این ویژگی اجازه می‌دهد اسکریپت‌های مؤلفهٔ عمومی به‌صورت پیوندهای سخت (hard links) در زیر $PCP_SHARE_DIR/lib/pmcheck پیاده‌سازی شوند.
  • هنگامی که با گزینهٔ -l، --list فراخوانی شود، اسکریپت کاری انجام نمی‌دهد؛ مگر این‌که هم‌زمان با گزینهٔ -v فراخوانده شود که در این حالت توضیح کوتاهی از مؤلفه در خروجی استاندارد نمایش داده می‌شود.
  • هنگامی که با گزینهٔ -s، --state فراخوانی شود، اسکریپت باید با یک کد خروجی که وضعیت مؤلفه را مشخص می‌کند پایان یابد؛ یعنی 0 (فعال)، 1 (غیرفعال، اما می‌تواند توسط pmcheck فعال شود)، 2 (غیرفعال و نمی‌تواند توسط pmcheck فعال گردد). تمایز میان کدهای خروج 1 و 2 بر اساس عوامل متعددی است، اما 1 معمولاً به این معنی است که تمام بسته‌های نرم‌افزاری لازم (PCP و موارد دیگر) نصب شده‌اند، سرویس‌های پیش‌نیاز مورد نیاز در حال اجرا هستند یا می‌توانند بدون خطر راه‌اندازی شوند، و هرگونه پیکربندی مؤلفه می‌تواند تنظیمات پیش‌فرض را در نظر بگیرد یا به‌طور قابل اطمینان استنتاج شود، برای نمونه شماره درگاه (پورت) برای ارتباطات. در مقابل، 2 به این معنی است که فعال‌سازی خودکار مؤلفه ممکن نیست و به مداخلهٔ کاربر نهایی نیاز است.
  • هنگامی که با گزینهٔ -a، --activate فراخوانی شود، اسکریپت باید مؤلفه را فعال کند. این به معنای اعمال هرگونه تغییر پیکربندی لازم است تا در راه‌اندازی مجدد بعدی سیستم یا راه‌اندازی مجدد pmcd(1) مجدداً راه‌اندازی شود، و در صورتی که در حال حاضر غیرفعال است، مؤلفه را آغاز کند.
  • هنگامی که با گزینهٔ -d، --deactivate فراخوانی شود، اسکریپت باید مؤلفه را غیرفعال کند. این به معنای متوقف کردن مؤلفه در صورت فعال بودن آن در حال حاضر، و اعمال هرگونه تغییر پیکربندی لازم است تا در راه‌اندازی مجدد بعدی سیستم یا راه‌اندازی مجدد pmcd(1) مجدداً راه‌اندازی نشود.
  • هنگامی که با گزینهٔ -n، --show-me فراخوانی شود، اسکریپت باید یک اجرای آزمایشی (dry run) انجام داده و هر دستور لازم را مطابق با قواعد شرح‌داده‌شده در بالا برای گزینهٔ -n در pmcheck در خروجی استاندارد چاپ (echo) کند.
  • اگر گزینهٔ -v، --verbose نیز مشخص شده باشد، اسکریپت باید متن توضیحی را در خروجی استاندارد ارائه دهد تا به روشن شدن وضعیت کمک کند، به‌ویژه در مواردی که مؤلفه فعال نیست یا پیکربندی مجدد ناموفق بوده است.

برای کمک به توسعهٔ اسکریپت مؤلفه، فایل $PCP_SHARE_DIR/lib/checkproc.sh می‌تواند بارگذاری (source) شود (پس از بارگذاری $PCP_DIR/etc/pcp.env). فایل checkproc.sh سرویس‌های زیر را ارائه می‌دهد:

  • یک دایرکتوری موقت ایجاد شده و متغیر شل $tmp به مسیر کامل دایرکتوری اختصاص می‌یابد.
  • متغیر شل $status برای بازگرداندن وضعیت خروج از اسکریپت استفاده می‌شود [پیش‌فرض 0 است].
  • متغیر شل $component به نام مؤلفهٔ مربوطه اختصاص می‌یابد.
  • متغیر شل $prog به نام پایهٔ (basename) اسکریپت اختصاص می‌یابد (بنابراین در حالت پیش‌فرض همان نام مؤلفه است).
  • یک trap برای پاک‌سازی $tmp و خروج با وضعیت $status تنظیم شده است.
  • یک رویهٔ شل به نام _do_args که تمام تجزیهٔ آرگومان‌های دستور را مدیریت می‌کند.
  • متغیرهای شل $aflag، $dflag، $lflag یا $sflag دارای مقادیر پیش‌فرض false هستند و هنگامی که گزینه‌های -a، -d، -l یا -s تجزیه شوند، توسط _do_args روی true تنظیم می‌شوند.
  • متغیر شل $show_me دارای مقدار پیش‌فرض false بوده و زمانی که گزینهٔ -n تجزیه شود، توسط _do_args روی true تنظیم می‌گردد.
  • متغیر شل $verbose تعداد گزینه‌های -v تجزیه‌شده توسط _do_args را می‌شمارد.
  • یک رویهٔ شل به نام _ctl_svc که درخواست‌های وضعیت و تمام عملیات پیکربندی مجدد را برای سرویس‌هایی که توسط systemctl(1) یا init(1) یا لایه‌های زیرساختی مشابه مدیریت می‌شوند، مدیریت می‌کند. _ctl_svc ۲ آرگومان می‌گیرد، اولی یک action (یکی از state، start، stop، activate (enable و start)، یا deactivate (stop و disable))، و دومی name مؤلفه است؛ برای مؤلفه‌های مدیریت‌شده توسط systemctl(1)، مقدار name باید نام پایهٔ (basename) سرویس باشد، مثلاً pmcd برای واحد pmcd.service در systemd(1)، در غیر این صورت name نام اسکریپت init(1) یا اسکریپت «rc» مشابه است..IP • _ctl_svc مقداری را (از طریق $? هنگامی که از یک اسکریپت شل فراخوانی شود) بازمی‌گرداند که با کدهای خروج تعریف‌شده در بالا برای هر کنش مطابقت دارد.
  • یک رویهٔ شل _ctl_pmda که درخواست‌های وضعیت و تمامی عملیات پیکربندی مجدد را برای یک PMDA متصل به pmcd(1) مدیریت می‌کند. _ctl_pmda حداقل ۲ آرگومان می‌گیرد؛ نخستین آرگومان یک کنش است (یکی از state، activate یا deactivate) و آرگومان دوم نام PMDA است. برای کنش install، یک آرگومان سوم برای نام فایل اجرایی یا DSO مربوط به PMDA وجود دارد و یک آرگومان اختیاری چهارم نیز نام فایلی است که ورودی مورد نیاز برای اسکریپت Install مربوط به PMDA را ارائه می‌دهد (پیش‌فرض /dev/null است).
  • _ctl_pmda مقداری را (از طریق $? هنگامی که از یک اسکریپت شل فراخوانی شود) بازمی‌گرداند که با کدهای خروج تعریف‌شده در بالا برای هر کنش مطابقت دارد.

بنابراین مورد زیر ساده‌ترین اسکریپت مؤلفهٔ ممکن برای یک سرویس سیستمی است.

#!/bin/sh
. $PCP_DIR/etc/pcp.env || exit 1
. $PCP_SHARE_DIR/lib/checkproc.sh

_do_args "$@"

if $lflag
then
    [ $verbose -gt 0 ] && echo "my description"
elif $sflag
then
    _ctl_svc state $component
    status=$?
elif $aflag
then
    _ctl_svc activate $component || status=1
elif $dflag
then
    _ctl_svc deactivate $component || status=1
fi

و مورد زیر ساده‌ترین اسکریپت مؤلفهٔ ممکن برای یک PMDA است.

#!/bin/sh
. $PCP_DIR/etc/pcp.env || exit 1
. $PCP_SHARE_DIR/lib/checkproc.sh

_do_args "$@"

if $lflag
then
    [ $verbose -gt 0 ] && echo "my description"
elif $sflag
then
    _ctl_pmda state $component
    status=$?
elif $aflag
then
    _ctl_pmda activate $component || status=1
elif $dflag
then
    _ctl_pmda deactivate $component || status=1
fi

برای pmcheck (نه اسکریپت‌های مؤلفه)، وضعیت خروج معمولاً 0 است، اما مقادیر 9 یا 99 نشان‌دهندهٔ اشکالات داخلی جدی هستند.

هنگامی که گزینه‌های -a یا -d استفاده شوند، موفقیت یا شکست پیکربندی مجدد روی خروجی استاندارد گزارش می‌شود.

برخی مؤلفه‌ها دارای پیش‌نیازهایی هستند که نیازمند نصب، پیکربندی و فعال بودن سرویس‌های غیر PCP دیگری می‌باشند؛ مانند یک سرور پایگاه داده یا یک سرور کلید-مقدار. در این موارد، بررسی وضعیت سرویس‌های غیر PCP ممکن است مشمول برخی کنترل‌های دسترسی باشد و اگر pmcheck توسط کاربری غیر از ریشه (non-root) اجرا شود، ممکن است خروجی حاصل از -s (پیش‌فرض) ناقص یا گمراه‌کننده باشد؛ در این شرایط، اجرای pmcheck به‌عنوان کاربر ریشه (root) گزارش دقیق‌تری ارائه خواهد داد.

متغیرهای محیطی با پیشوند PCP_ برای مقداردهی نام فایل‌ها و دایرکتوری‌های مورد استفاده توسط PCP به کار می‌روند. در هر نصب، فایل /etc/pcp.conf حاوی مقادیر محلی برای این متغیرها است. متغیر $PCP_CONF ممکن است برای تعیین یک فایل پیکربندی جایگزین استفاده شود، همان‌طور که در pcp.conf(5) شرح داده شده است..SH "همچنین ببینید (SEE ALSO)" init(1)، PCPIntro(1)، pmcd(1)، pmlogger(1)، pmproxy(1)، sh(1)، systemctl(1)، pcp.conf(5) و pcp.env(5).

PCP Performance Co-Pilot