وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

خطای Address already in use؛ کدام برنامه پورت را گرفته است؟

پورت اشغال‌شده را در لینوکس پیدا کنید و بدون بستن سرویس ناشناس، تداخل دو برنامه را برطرف کنید.

انتشار:
توسط تیم فنی نت‌آرام
۳ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله خطای Address already in use؛ کدام برنامه پورت را گرفته است؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
برنامه‌ای را اجرا می‌کنید اما خطای Address already in use می‌گیرید. معمولاً برنامه می‌خواهد روی آدرس و پورتی گوش کند که برنامه دیگری از آن استفاده می‌کند. خاموش کردن برنامه ناشناس می‌تواند سایت دیگری را از دسترس خارج کند؛ ابتدا صاحب پورت و وظیفه آن را پیدا کنید.
عدد ۸۰۸۰ در تصویر فقط یک مثال است؛ در سرور خودتان شماره پورت را از متن خطا پیدا کنید.

اول شماره پورت را از پیام خطا بردارید

پورت در پیام یا تنظیمات برنامه مشخص می‌شود. در مثال‌های زیر 8080 فقط یک شماره نمونه است؛ از پورت واقعی برنامه خود استفاده کنید:
کد / دستورsudo ss -lntp 'sport = :8080'
گزینه‌ها اتصال‌های TCP در حالت گوش دادن و نام فرایند را نشان می‌دهند. برای UDP دستور متفاوت است؛ به جای lntp از lnup استفاده کنید. اگر نام برنامه را نمی‌بینید، ممکن است مجوز کافی نداشته باشید یا سرویس در فضای شبکه جدا مانند کانتینر اجرا شود.
به ستون Local Address توجه کنید. اتصال به 127.0.0.1 با گوش دادن روی همه آدرس‌ها یکسان نیست. IPv4 و IPv6 و سیاست سیستم هم می‌توانند در تداخل اثر داشته باشند. هر دو برنامه ممکن است یک شماره پورت داشته باشند ولی آدرس و نحوه اتصال تعیین‌کننده است.

صاحب فرایند را شناسایی کنید

فرض کنید خروجی PID برابر 1234 را نشان داده است. این شماره صرفاً مثال است:
کد / دستورps -p 1234 -o pid,ppid,user,etime,comm,args
فرمان نشان می‌دهد کدام حساب و برنامه به آن PID مربوط است. خروجی args ممکن است حاوی داده حساس باشد؛ آن را عمومی منتشر نکنید. قبل از اقدام بررسی کنید آیا آن فرایند نسخه قبلی همان برنامه است یا وب‌سرور سایت دیگری. اگر مدیریت آن با systemd انجام می‌شود، وضعیت سرویس مربوط و گزارش شروعش را نیز ببینید.

راه‌حل را بر اساس مالک انتخاب کنید

اگر نسخه قبلی برنامه باید فعال بماند، در تنظیمات برنامه جدید یک پورت آزاد و مجاز انتخاب کنید و مسیر اتصال مشتری یا reverse proxy را متناسب اصلاح کنید. صرف تغییر پورت برنامه بدون تغییر مقصد وب‌سرور باعث ادامه قطعی می‌شود.
اگر همان سرویس به اشتباه دو بار شروع شده است، آن را از روش رسمی سرویس متوقف و دوباره طبق دستورالعمل راه‌اندازی کنید. پیش از توقف اثر آن بر کاربران و امکان بازگشت را بسنجید. از kill کردن فرایند بر اساس یک PID نمونه استفاده نکنید؛ PIDها تغییر می‌کنند.

نمونه تصمیم برای پورت 8080

اگر خروجی ss نشان داد برنامه قدیمی خودتان روی 8080 گوش می‌دهد و باید روشن بماند، پورت برنامه جدید را در فایل تنظیم همان برنامه به یک پورت آزاد مثل 8081 تغییر دهید؛ پیش از انتخاب با sudo ss -lntp 'sport = :8081' وضعیت آن را ببینید. سپس اگر وب‌سرور واسط دارید مقصد upstream را هم طبق راهنمای خودش تغییر دهید، پیکربندی وب‌سرور را پیش از اعمال آزمایش کنید و یک درخواست واقعی از مسیر مجاز بفرستید. عددها نمونه‌اند و باز بودن پورت جدید به اینترنت لازم نیست.

نتیجه را از مسیر واقعی آزمایش کنید

پس از اصلاح، ss را دوباره اجرا کنید و ببینید فقط سرویس مورد انتظار روی پورت مناسب گوش می‌دهد. سپس از مسیر مجاز یک درخواست نمونه بفرستید و گزارش برنامه را نگاه کنید. باز بودن پورت به معنی صحت همه عملکرد برنامه نیست؛ خود عملیات مورد نیاز کاربر را نیز بررسی کنید.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام