رفع خطای TCP bind() error Address already in use در لینوکس

خطای TCP bind() error Address already in use چیست؟

خطای ERROR TCP bind() error Address already in use یکی از رایج‌ترین خطاهای سرور لینوکسی است که هنگام تلاش یک سرویس برای اتصال (bind) به یک پورت یا سوکت که قبلاً توسط سرویس دیگری اشغال شده رخ می‌دهد.

این خطا اغلب هنگام ری‌استارت سرویس‌هایی مانند ClamAV، Apache، MySQL، LiteSpeed یا Nginx دیده می‌شود. در این مقاله دلایل بروز و راه‌حل‌های کامل رفع این خطا را بررسی می‌کنیم.

دلایل بروز خطای Address already in use

۱. سرویس قبلی هنوز در حال اجرا است

شایع‌ترین دلیل این است که نمونه قبلی سرویس به درستی متوقف نشده و هنوز پورت یا سوکت مورد نظر را اشغال کرده است. مثلاً اگر Apache روی پورت ۸۰ در حال اجراست و شما بخواهید نمونه دیگری از Apache اجرا کنید، این خطا رخ می‌دهد.

۲. تداخل سوکت ClamAV

در بسیاری از سرورهای هاستینگ، این خطا مربوط به ClamAV (clamd) است که از سوکت /tmp/clamd.socket استفاده می‌کند. اگر فایل سوکت قبلی به‌درستی پاک نشده باشد، clamd نمی‌تواند استارت شود.

۳. دو سرویس روی یک پورت

گاهی دو وب‌سرور مختلف (مثلاً Apache و Nginx) هر دو تنظیم شده‌اند تا روی پورت ۸۰ یا ۴۴۳ گوش دهند.

روش‌های رفع خطا

روش ۱: رفع مشکل ClamAV (clamd)

اگر خطا مربوط به ClamAV است، فایل پیکربندی clamd.conf را ویرایش کنید:

nano /etc/clamd.conf

خط زیر را پیدا کنید:

LocalSocket /tmp/clamd.socket

آن را به مسیر زیر تغییر دهید:

LocalSocket /var/run/clamd/clamd.socket

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

mkdir -p /var/run/clamd
chown clamav:clamav /var/run/clamd
systemctl restart clamd

روش ۲: شناسایی سرویس اشغال‌کننده پورت

برای پیدا کردن اینکه کدام سرویس یک پورت خاص را اشغال کرده:

lsof -i :80

یا:

netstat -tulnp | grep :80

یا با دستور جدیدتر:

ss -tulnp | grep :80

این دستورات نام سرویس و PID فرآیند اشغال‌کننده پورت را نشان می‌دهند.

روش ۳: متوقف کردن سرویس مزاحم

پس از شناسایی PID فرآیند، آن را متوقف کنید:

kill -9 PID_NUMBER

و سپس سرویس مورد نظر را مجدداً استارت کنید.

روش ۴: حذف فایل سوکت قدیمی

گاهی فایل سوکت از سشن قبلی باقی مانده و باید دستی حذف شود:

rm -f /tmp/clamd.socket
rm -f /var/run/clamd/clamd.socket

روش ۵: بررسی TIME_WAIT

پس از بسته شدن یک اتصال TCP، پورت ممکن است برای مدتی در وضعیت TIME_WAIT باقی بماند. برای بررسی:

ss -s

اگر تعداد زیادی اتصال در وضعیت TIME_WAIT دارید، می‌توانید تنظیمات کرنل را بهینه کنید:

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

پیشگیری از تکرار خطا

برای جلوگیری از بروز مجدد این خطا، توصیه می‌شود همیشه سرویس‌ها را با دستورات استاندارد systemctl متوقف و استارت کنید (به جای kill کردن مستقیم). مطمئن شوید که دو سرویس مشابه روی یک پورت تنظیم نشده‌اند. همچنین فایروال CSF را به‌درستی پیکربندی کنید تا از تداخل سرویس‌ها جلوگیری شود.

اگر این خطا مکرراً روی سرور شما رخ می‌دهد، ممکن است منابع سرور کافی نباشد. ارتقا به یک سرور مجازی با رم و CPU بیشتر می‌تواند از بسیاری از مشکلات ناشی از کمبود منابع جلوگیری کند.

همچنین برای پیکربندی حرفه‌ای ClamAV، فایروال و سایر سرویس‌های سرور، خدمات کانفیگ سرور میهن هاستینگ در اختیار شماست.

⚙️ کانفیگ حرفه‌ای سرور

تنظیم ClamAV، فایروال CSF و رفع مشکلات سرویس‌های سرور توسط متخصصان میهن هاستینگ.

سفارش کانفیگ سرور ←

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

متن نظر
نام*:
رایانامه*:
وب سایت / وبلاگ: