epmd(1) Erlang Module Definition epmd(1)

epmd - دیمن نگاشت درگاه ارلنگ (Erlang Port Mapper Daemon)

دستور epmd می‌تواند برای راه‌اندازی دیمن نگاشت درگاه استفاده شود:

epmd [-d|-debug] [DbgExtra...] [-address Addresses]
    [-port No] [-daemon] [-relaxed_command_check]

همچنین می‌تواند برای برقراری ارتباط با دیمن نگاشت درگاهِ در حال اجرا استفاده شود:

epmd [-d|-debug] [-port No] [-names|-kill|-stop Name]

این دیمن به عنوان سرور نام روی تمام میزبان‌های درگیر در محاسبات توزیع‌شده ارلنگ عمل می‌کند. هنگامی که یک گره ارلنگ شروع به کار می‌کند، دارای یک نام است و آدرسی را از هسته سیستم‌عامل میزبان دریافت می‌کند. نام و آدرس به دیمن epmd که روی میزبان محلی در حال اجراست فرستاده می‌شوند. در محیط TCP/IP، آدرس شامل آدرس IP و یک شماره درگاه است. نام گره یک اتم به شکل Name@Node است. وظیفه دیمن epmd پیگیری این است که کدام نام گره به کدام آدرس گوش می‌دهد. بنابراین، epmd نام‌های نمادین گره را به آدرس‌های ماشین نگاشت می‌کند.

دیمن TCP/IP epmd تنها بخش Name (بخش اول) از نام گره ارلنگ را پیگیری می‌کند. بخش Host (هر آنچه پس از @ می‌آید) و همچنین آدرس IP که گره ارلنگ در آن در دسترس است، به صورت ضمنی در نام گره‌ای که با دیمن epmd ارتباط برقرار کرده مشخص است. بنابراین، برای عملکرد صحیح یک شبکه ارلنگ، سرویس‌های نام‌گذاری TCP سازگار و درست مورد نیاز است.

نکته: در ویندوز حداکثر تعداد گره‌های مجاز در یک نمونه epmd برابر با ۶۰ است. این به دلیل محدودیت‌های پیاده‌سازی فعلی است. اگر به گره‌های بیشتری نیاز دارید، باید از پیاده‌سازی‌های epmd مبتنی بر ارلنگ مانند Erlang EPMD استفاده کنید.

اگر گره قرار است توزیع‌شده باشد و نمونه‌ای در حال اجرا وجود نداشته باشد، دیمن به طور خودکار توسط دستور erl(1) راه‌اندازی می‌شود. در صورت راه‌اندازی خودکار، برای تغییر رفتار دیمن باید از متغیرهای محیطی استفاده شود؛ بخش متغیرهای محیطی را ببینید.

اگر آرگومان -daemon مشخص نشود، epmd به عنوان یک برنامه معمولی با ترمینال کنترلی شلی که در آن شروع شده اجرا می‌شود. در حالت عادی، باید به عنوان دیمن اجرا شود.

گزینه‌های راه‌اندازی معمول در بخش «گزینه‌های معمول» شرح داده شده‌اند.

گزینه‌های DbgExtra در بخش «گزینه‌های DbgExtra» شرح داده شده‌اند.

برقراری ارتباط با دیمن در حال اجرای epmd توسط برنامه epmd عمدتاً برای اهداف اشکال‌زدایی انجام می‌شود.

پرس‌وجوهای مختلف در بخش «گزینه‌های تعاملی» شرح داده شده‌اند.

این گزینه‌ها هنگام راه‌اندازی سرور نام در دسترس هستند. سرور نام به طور معمول خودکار توسط دستور erl(1) (در صورت عدم وجود) راه‌اندازی می‌شود، اما در زمان بالا آمدن سیستم نیز می‌تواند شروع شود.

به این نمونه از epmd اجازه می‌دهد فقط به فهرستِ با کاما جداشده آدرس‌های IP و آدرس loopback (که در صورت مشخص نشدن به طور ضمنی اضافه می‌شود) گوش دهد. این مقدار را می‌توان با استفاده از متغیر محیطی ERL_EPMD_ADDRESS نیز تنظیم کرد؛ بخش متغیرهای محیطی را ببینید.
به این نمونه از epmd اجازه می‌دهد به درگاه TCP دیگری غیر از درگاه پیش‌فرض ۴۳۶۹ گوش دهد. این مقدار را می‌توان با استفاده از متغیر محیطی ERL_EPMD_PORT نیز تنظیم کرد؛ بخش متغیرهای محیطی را ببینید.
خروجی اشکال‌زدایی را فعال می‌کند. هرچه فلگ‌های -d بیشتری مشخص شود، خروجی اشکال‌زدایی بیشتری (تا حدی معین) دریافت خواهید کرد. این گزینه زمانی بیشترین کاربرد را دارد که دیمن epmd به عنوان دیمن راه‌اندازی نشده باشد.
برنامه epmd را به صورت جداشده از ترمینال کنترلی اجرا می‌کند. در صورت موجود بودن و پیکربندی صحیح، لاگ‌ها در syslog ثبت می‌شوند. اگر دیمن epmd در زمان بوت راه‌اندازی شود، این گزینه حتماً باید استفاده شود. همچنین زمانی استفاده می‌شود که دستور erl به طور خودکار epmd را اجرا می‌کند.
برنامه epmd را با بررسی دستوری آسان‌گیرانه (عمدتاً برای سازگاری با نسخه‌های پیشین) اجرا می‌کند. این مورد روی موارد زیر اثر می‌گذارد:
•با بررسی دستوری آسان‌گیرانه، دیمن epmd می‌تواند از طریق میزبان محلی حتی در صورت ثبت بودن گره‌های فعال، با دستوری مانند epmd -kill متوقف شود. در حالت عادی فقط دیمن‌هایی با پایگاه‌داده گره خالی می‌توانند با epmd -kill کشته شوند.
•دستور epmd -stop (و پیام‌های متناظر به epmd، همان‌طور که می‌توان با استفاده از erl_interface:ei(3) مشخص کرد) در حالت عادی همیشه نادیده گرفته می‌شود. چرا که می‌تواند باعث ایجاد شرایط عجیبی شود که در آن دو گره با یک نام به طور همزمان فعال باشند. یک گره ثبت خود را فقط با بستن اتصال به epmd لغو می‌کند، به همین دلیل دستور stop تنها برای استفاده در شرایط اشکال‌زدایی در نظر گرفته شده بود.

با فعال بودن بررسی دستوری آسان‌گیرانه، می‌توانید گره‌های فعال را به صورت اجباری لغو ثبت کنید.

بررسی دستوری آسان‌گیرانه را می‌توان با تنظیم متغیر محیطی ERL_EPMD_RELAXED_COMMAND_CHECK پیش از راه‌اندازی epmd نیز فعال کرد.

از بررسی دستوری آسان‌گیرانه فقط در سیستم‌هایی با استفاده تعاملی بسیار محدود استفاده کنید.

نکته: این گزینه‌ها فقط برای اشکال‌زدایی و آزمایش کلاینت‌های epmd هستند. در استفاده عادی نباید به کار روند.

تعداد ثانیه‌هایی را مشخص می‌کند که یک اتصال می‌تواند پیش از اتمام مهلت زمانی (Timeout) و بسته شدن اتصال توسط epmd، غیرفعال بماند. پیش‌فرض ۶۰ است.
برای شبیه‌سازی یک سرور شلوغ، می‌توانید تاخیری بین زمانی که epmd از درخواست اتصال جدید آگاه می‌شود و زمانی که اتصال پذیرفته می‌شود ایجاد کنید.
این نیز شبیه‌سازی یک سرور شلوغ است. تاخیری پیش از ارسال پاسخ اعمال می‌کند.

این گزینه‌ها باعث می‌شوند epmd به عنوان یک دستور تعاملی اجرا شده و نتایج ارسال پرس‌وجوها به یک نمونه در حال اجرای epmd را نمایش دهد. نمونه epmd مورد تماس همواره روی گره محلی است، اما گزینه -port می‌تواند برای انتخاب میان نمونه‌ها در صورتی که چندین نمونه با استفاده از درگاه‌های مختلف روی میزبان در حال اجرا باشند استفاده شود.

با epmd که روی شماره درگاه TCP مشخص‌شده (پیش‌فرض ۴۳۶۹) گوش می‌دهد ارتباط برقرار می‌کند. این مقدار را می‌توان با استفاده از متغیر محیطی ERL_EPMD_PORT نیز تنظیم کرد؛ بخش متغیرهای محیطی را ببینید.
نام‌های ثبت‌شده در epmd در حال اجرای فعلی را فهرست می‌کند.
دیمن epmd در حال اجرای فعلی را متوقف می‌کند.

متوقف کردن epmd در حال اجرا فقط زمانی مجاز است که epmd -names یک پایگاه‌داده خالی را نشان دهد یا گزینه -relaxed_command_check هنگام راه‌اندازی نمونه در حال اجرای epmd مشخص شده باشد.

توجه داشته باشید که -relaxed_command_check هنگام راه‌اندازی دیمنی مشخص می‌شود که قرار است در صورت داشتن گره‌های فعال ثبت‌شده، متوقف شدن را بپذیرد. هنگام اجرای تعاملی epmd، گزینه -relaxed_command_check هیچ تاثیری ندارد. دیمنی که بدون بررسی دستوری آسان‌گیرانه راه‌اندازی شده باشد، در صورت داشتن کلاینت‌های فعال ثبت‌شده باید با استفاده از سیگنال‌ها یا روش‌های دیگر سیستم‌عامل متوقف شود.

یک گره فعال را به صورت اجباری از پایگاه‌داده epmd لغو ثبت می‌کند.

این دستور فقط هنگام برقراری ارتباط با نمونه‌های epmd که با فلگ -relaxed_command_check راه‌اندازی شده‌اند قابل استفاده است.

توجه داشته باشید که بررسی دستوری آسان‌گیرانه باید برای دیمن epmd مورد تماس فعال شده باشد. هنگام اجرای تعاملی epmd، گزینه -relaxed_command_check هیچ تاثیری ندارد.

می‌تواند روی یک فهرست با کاما جداشده از آدرس‌های IP تنظیم شود که در این صورت دیمن epmd فقط به آدرس(های) مشخص‌شده و آدرس loopback (که در صورت مشخص نشدن به طور ضمنی اضافه می‌شود) گوش می‌دهد. رفتار پیش‌فرض گوش دادن به تمام آدرس‌های IP موجود است.
می‌تواند شامل شماره درگاهی باشد که epmd استفاده خواهد کرد. درگاه پیش‌فرض در بیشتر موارد مناسب است. می‌توان درگاه دیگری را مشخص کرد تا چندین نمونه از epmd، به نمایندگی از خوشه‌های مستقل از گره‌ها، بتوانند روی یک میزبان همزیستی داشته باشند. تمام گره‌ها در یک خوشه باید از شماره درگاه epmd یکسان استفاده کنند.
اگر پیش از راه‌اندازی تنظیم شود، دیمن epmd به گونه‌ای رفتار می‌کند که گویی گزینه -relaxed_command_check در زمان راه‌اندازی مشخص شده است. در نتیجه، اگر این گزینه پیش از راه‌اندازی ماشین مجازی ارلنگ تنظیم شده باشد، دیمن epmd که خودکار راه‌اندازی می‌شود دستورات -kill و -stop را بدون محدودیت می‌پذیرد.

در برخی سیستم‌عامل‌ها هنگامی که epmd به عنوان دیمن اجرا می‌شود، از syslog برای گزارش خطا استفاده خواهد شد. برای فعال‌سازی ثبت خطا، باید فایل ‎/etc/syslog.conf‎ را ویرایش کرده و یک ورودی اضافه کنید:

!epmd
*.*<TABs>/var/log/epmd.log

که در آن <TABs> حداقل یک نویسه تب (Tab) واقعی است. فاصله‌ها (Spaces) نادیده گرفته می‌شوند.

دیمن epmd پیام‌ها را هم از میزبان محلی و هم از میزبان‌های راه دور می‌پذیرد. با این حال، اگر پرس‌وجو از یک میزبان راه دور بیاید، فقط به دستورات پرس‌وجو پاسخ داده می‌شود (و طبق آن‌ها عمل می‌گردد). تلاش برای ثبت نام یک گره در صورتی که کلاینت فرآیندی روی همان میزبانِ محل اجرای نمونه epmd نباشد، همیشه یک خطا است. چنین درخواست‌هایی خصمانه تلقی شده و اتصال فوراً بسته می‌شود.

پرس‌وجوهای زیر از گره‌های راه دور پذیرفته می‌شوند:

•پرس‌وجوهای درگاه؛ یعنی گره با نام مشخص‌شده به کدام درگاه گوش می‌دهد.
•فهرست کردن نام‌ها؛ یعنی ارائه فهرستی از تمام نام‌های ثبت‌شده روی میزبان.

برای محدود کردن بیشتر دسترسی، باید از نرم‌افزار دیوار آتش (Firewall) استفاده شود.

erts 17.0.6 Ericsson AB