ساخت اسکریپت برای چک کردن وضعیت سرور با پایتون

ساخت اسکریپت برای چک کردن وضعیت سرور با پایتون

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

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را در اختیار دارید:

  • نصب پایتون: پایتون باید بر روی سیستم شما نصب شده باشد. می‌توانید آخرین نسخه پایتون را از وب‌سایت رسمی پایتون دریافت کنید.
  • دانش پایه پایتون: آشنایی با مفاهیم پایه پایتون مانند متغیرها، حلقه‌ها، شرط‌ها و توابع ضروری است.
  • دسترسی به سرور: شما باید دسترسی به سروری که می‌خواهید وضعیت آن را بررسی کنید داشته باشید. این دسترسی می‌تواند از طریق SSH، پینگ یا سایر پروتکل‌ها باشد.

روش‌های چک کردن وضعیت سرور

روش‌های مختلفی برای چک کردن وضعیت سرور وجود دارد. برخی از رایج‌ترین روش‌ها عبارتند از:

  • پینگ (Ping): ساده‌ترین روش برای بررسی در دسترس بودن سرور، ارسال یک درخواست پینگ به سرور است. اگر سرور پاسخ دهد، به این معنی است که سرور در دسترس است.
  • بررسی پورت (Port Check): برای بررسی اینکه آیا یک سرویس خاص بر روی سرور در حال اجرا است، می‌توانید پورت مربوط به آن سرویس را بررسی کنید.
  • درخواست HTTP (HTTP Request): اگر سرور یک وب‌سرور است، می‌توانید یک درخواست HTTP به آن ارسال کنید و پاسخ را بررسی کنید.
  • SSH: با استفاده از SSH می‌توانید به سرور متصل شده و دستورات مختلفی را برای بررسی وضعیت آن اجرا کنید.

ساخت اسکریپت پایتون برای چک کردن وضعیت سرور با پینگ

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

import subprocess
import platform

def check_server_status(server_address):
    """
    وضعیت سرور را با استفاده از پینگ بررسی می‌کند.

    Args:
        server_address (str): آدرس IP یا نام دامنه سرور.

    Returns:
        bool: True اگر سرور در دسترس باشد، False در غیر این صورت.
    """
    param = '-n' if platform.system().lower() == 'windows' else '-c'
    command = ['ping', param, '1', server_address]

    try:
        result = subprocess.call(command, timeout=5)
        return result == 0
    except subprocess.TimeoutExpired:
        return False
    except Exception as e:
        print(f"خطا در اجرای پینگ: {e}")
        return False

if __name__ == "__main__":
    server_address = input("آدرس IP یا نام دامنه سرور را وارد کنید: ")
    if check_server_status(server_address):
        print(f"سرور {server_address} در دسترس است.")
    else:
        print(f"سرور {server_address} در دسترس نیست.")

توضیحات کد:

  • import subprocess: این ماژول به شما امکان می‌دهد تا دستورات سیستم عامل را از طریق پایتون اجرا کنید.
  • import platform: این ماژول برای تشخیص سیستم عامل استفاده می شود.
  • check_server_status(server_address): این تابع وضعیت سرور را با استفاده از پینگ بررسی می‌کند.
  • param = ‘-n’ if platform.system().lower() == ‘windows’ else ‘-c’: این خط کد پارامتر مربوط به تعداد پینگ‌ها را بر اساس سیستم عامل تنظیم می‌کند. در ویندوز از ‘-n’ و در لینوکس/مک از ‘-c’ استفاده می‌شود.
  • command = [‘ping’, param, ‘1’, server_address]: این خط کد دستور پینگ را با پارامترهای لازم ایجاد می‌کند.
  • subprocess.call(command, timeout=5): این خط کد دستور پینگ را اجرا می‌کند و نتیجه را برمی‌گرداند. پارامتر timeout=5 مشخص می‌کند که اگر سرور بعد از 5 ثانیه پاسخ نداد، یک استثنا (TimeoutExpired) ایجاد شود.
  • if result == 0: اگر دستور پینگ با موفقیت اجرا شد (یعنی سرور پاسخ داد)، مقدار result برابر با 0 خواهد بود.
  • if __name__ == “__main__”: این بلوک کد فقط زمانی اجرا می‌شود که اسکریپت به طور مستقیم اجرا شود (نه زمانی که به عنوان یک ماژول وارد شود).
  • server_address = input(“آدرس IP یا نام دامنه سرور را وارد کنید: “): این خط کد از کاربر می‌خواهد که آدرس IP یا نام دامنه سرور را وارد کند.
  • if check_server_status(server_address): این خط کد تابع check_server_status را با آدرس سرور وارد شده فراخوانی می‌کند و نتیجه را بررسی می‌کند.

ساخت اسکریپت پایتون برای چک کردن وضعیت سرور با بررسی پورت

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

import socket

def check_port_status(server_address, port):
    """
    وضعیت یک پورت خاص را بر روی سرور بررسی می‌کند.

    Args:
        server_address (str): آدرس IP یا نام دامنه سرور.
        port (int): شماره پورت.

    Returns:
        bool: True اگر پورت باز باشد، False در غیر این صورت.
    """
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(5)
        result = sock.connect_ex((server_address, port))
        sock.close()
        return result == 0
    except socket.gaierror:
        print("آدرس سرور نامعتبر است.")
        return False
    except Exception as e:
        print(f"خطا در اتصال به پورت: {e}")
        return False

if __name__ == "__main__":
    server_address = input("آدرس IP یا نام دامنه سرور را وارد کنید: ")
    try:
        port = int(input("شماره پورت را وارد کنید: "))
    except ValueError:
        print("شماره پورت باید یک عدد صحیح باشد.")
        exit()

    if check_port_status(server_address, port):
        print(f"پورت {port} بر روی سرور {server_address} باز است.")
    else:
        print(f"پورت {port} بر روی سرور {server_address} بسته است.")

توضیحات کد:

  • import socket: این ماژول به شما امکان می‌دهد تا با استفاده از سوکت‌ها به شبکه متصل شوید.
  • check_port_status(server_address, port): این تابع وضعیت یک پورت خاص را بر روی سرور بررسی می‌کند.
  • sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM): این خط کد یک سوکت TCP ایجاد می‌کند.
  • sock.settimeout(5): این خط کد یک تایم‌اوت 5 ثانیه‌ای برای اتصال به پورت تنظیم می‌کند.
  • result = sock.connect_ex((server_address, port)): این خط کد سعی می‌کند به پورت مشخص شده بر روی سرور متصل شود. اگر اتصال موفقیت‌آمیز باشد، مقدار result برابر با 0 خواهد بود.
  • sock.close(): این خط کد سوکت را می‌بندد.
  • if __name__ == “__main__”: این بلوک کد فقط زمانی اجرا می‌شود که اسکریپت به طور مستقیم اجرا شود.
  • port = int(input(“شماره پورت را وارد کنید: “)) این خط کد از کاربر می‌خواهد که شماره پورت را وارد کند.

بهبود اسکریپت و افزودن قابلیت‌های بیشتر

اسکریپت‌های ارائه شده در این مقاله، نمونه‌های ساده‌ای از چک کردن وضعیت سرور هستند. می‌توانید با افزودن قابلیت‌های بیشتر، این اسکریپت‌ها را بهبود بخشید. برخی از ایده‌ها برای بهبود اسکریپت عبارتند از:

  • ارسال ایمیل یا پیامک: در صورت بروز مشکل، می‌توانید یک ایمیل یا پیامک به شما ارسال شود.
  • ثبت لاگ: می‌توانید وضعیت سرور را در یک فایل لاگ ثبت کنید تا بتوانید تاریخچه عملکرد سرور را بررسی کنید.
  • استفاده از کتابخانه‌های پیشرفته: کتابخانه‌هایی مانند ‘psutil’ و ‘requests’ می‌توانند به شما در جمع‌آوری اطلاعات بیشتر در مورد سرور کمک کنند.
  • مانیتورینگ چند سرور: می‌توانید اسکریپت را طوری طراحی کنید که وضعیت چندین سرور را به طور همزمان بررسی کند.
  • استفاده از زمان‌بندی (Scheduling): می‌توانید از یک زمان‌بندی‌کننده مانند ‘cron’ (در لینوکس) یا ‘Task Scheduler’ (در ویندوز) برای اجرای خودکار اسکریپت در فواصل زمانی مشخص استفاده کنید.

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

بدون دیدگاه

دیدگاهتان را بنویسید

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