بکندباز

مدیریت سرویس‌ها با systemd

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

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

معرفی systemd

systemd یک سیستم init مدرن و قدرتمند است که در سال 2010 توسط Lennart Poettering و همکارانش توسعه یافت. این سیستم به سرعت جایگزین سیستم init قدیمی در بسیاری از توزیع‌های لینوکس مانند Ubuntu، Fedora، Debian و CentOS شد. systemd نه تنها مسئولیت شروع و مدیریت سرویس‌ها در زمان بوت سیستم را بر عهده دارد، بلکه وظایف دیگری مانند مدیریت دستگاه‌ها، شبکه، لاگ‌ها و زمان‌بندی وظایف را نیز انجام می‌دهد.

معماری systemd

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

  • Unit Files: فایل‌های پیکربندی که تعریف‌کننده‌ی سرویس‌ها، سوکت‌ها، دستگاه‌ها و سایر منابع سیستم هستند.
  • journald: سیستم لاگ‌گیری systemd که جایگزین syslog شده و امکان ذخیره‌سازی و جستجوی پیشرفته‌ی لاگ‌ها را فراهم می‌کند.
  • systemctl: ابزار خط فرمان اصلی برای مدیریت سرویس‌ها و unit files.
  • timers: سیستم زمان‌بندی systemd که جایگزین cron شده و امکان اجرای وظایف زمان‌بندی شده را فراهم می‌کند.

تفاوت‌های systemd با init قدیمی

systemd در مقایسه با سیستم init قدیمی مزایای قابل توجهی دارد:

  • سرعت بوت: systemd با موازی‌سازی فرآیندهای بوت، زمان راه‌اندازی سیستم را به طور چشمگیری کاهش می‌دهد.
  • مدیریت وابستگی‌ها: systemd به طور خودکار وابستگی‌های بین سرویس‌ها را مدیریت می‌کند و از شروع سرویس‌ها قبل از آماده‌سازی منابع مورد نیازشان جلوگیری می‌کند.
  • لاگ‌گیری پیشرفته: journald امکان ذخیره‌سازی و جستجوی لاگ‌ها را به صورت ساختار یافته و کارآمد فراهم می‌کند.
  • انعطاف‌پذیری: systemd از unit files پشتیبانی می‌کند که امکان پیکربندی دقیق و سفارشی‌سازی سرویس‌ها را فراهم می‌کند.

با این مزایا، systemd به یک ابزار ضروری برای مدیریت سیستم‌های لینوکس تبدیل شده است. در بخش‌های بعدی، به بررسی نحوه‌ی نصب، پیکربندی و مدیریت سرویس‌ها با استفاده از systemd خواهیم پرداخت.

نصب و پیکربندی systemd

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

نصب systemd

در بیشتر توزیع‌های لینوکس، systemd به عنوان بخشی از سیستم پایه نصب شده است. اما اگر نیاز به نصب دستی آن دارید، می‌توانید از دستورات زیر استفاده کنید:

  • در توزیع‌های مبتنی بر Debian/Ubuntu:
    sudo apt-get update
    sudo apt-get install systemd
    Bash
  • در توزیع‌های مبتنی بر Red Hat/CentOS:
    sudo yum install systemd
    Bash
  • در توزیع‌های مبتنی بر Arch Linux:
    sudo pacman -S systemd
    Bash

پس از نصب، می‌توانید با دستور زیر از نسخه‌ی نصب‌شده‌ی systemd اطمینان حاصل کنید:

systemd --version
Bash

پیکربندی systemd

فایل‌های پیکربندی systemd در مسیر /etc/systemd/system/ و /usr/lib/systemd/system/ قرار دارند. این فایل‌ها به عنوان unit files شناخته می‌شوند و هر کدام مسئول مدیریت یک سرویس، سوکت، دستگاه یا سایر منابع سیستم هستند.

ساختار unit files

هر unit file شامل بخش‌های مختلفی است که هر کدام تنظیمات خاصی را تعریف می‌کنند. برخی از بخش‌های رایج در unit files عبارتند از:

  • [Unit]: شامل اطلاعات کلی درباره‌ی unit، مانند توضیحات، وابستگی‌ها و شرایط شروع.
  • [Service]: شامل تنظیمات مربوط به سرویس، مانند دستور شروع، توقف و راه‌اندازی مجدد.
  • [Install]: شامل تنظیمات مربوط به نصب و فعال‌سازی unit.

مثال یک unit file ساده

در زیر یک مثال ساده از یک unit file برای یک سرویس سفارشی آورده شده است:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/usr/bin/myservice
Restart=on-failure

[Install]
WantedBy=multi-user.target
Ini

در این مثال:

  • Description: توضیح کوتاهی درباره‌ی سرویس ارائه می‌دهد.
  • After: مشخص می‌کند که این سرویس پس از فعال‌شدن شبکه شروع شود.
  • ExecStart: دستوری که برای شروع سرویس اجرا می‌شود.
  • Restart: تعیین می‌کند که در صورت شکست سرویس، به طور خودکار راه‌اندازی مجدد شود.
  • WantedBy: مشخص می‌کند که این سرویس در حالت multi-user.target فعال شود.
آموزش مرتبط:  نوشتن اسکریپت‌های Perl برای مدیریت سیستم

دستورات پایه‌ای برای مدیریت systemd

برای مدیریت systemd، از دستور systemctl استفاده می‌شود. برخی از دستورات پایه‌ای عبارتند از:

  • بررسی وضعیت systemd:
    systemctl status
    Bash
  • شروع یک سرویس:
    sudo systemctl start servicename
    Bash
  • توقف یک سرویس:
    sudo systemctl stop servicename
    Bash
  • راه‌اندازی مجدد یک سرویس:
    sudo systemctl restart servicename
    Bash
  • فعال‌سازی یک سرویس برای شروع خودکار در زمان بوت:
    sudo systemctl enable servicename
    Bash
  • غیرفعال‌سازی یک سرویس برای شروع خودکار در زمان بوت:
    sudo systemctl disable servicename
    Bash

با این دستورات، می‌توانید به راحتی سرویس‌های خود را مدیریت کنید. در بخش بعدی، به بررسی جزئیات بیشتر درباره‌ی مدیریت سرویس‌ها با systemd خواهیم پرداخت.

مدیریت سرویس‌ها با systemd

مدیریت سرویس‌ها یکی از اصلی‌ترین وظایف systemd است. با استفاده از systemd، می‌توانید سرویس‌ها را شروع، توقف، راه‌اندازی مجدد، فعال‌سازی و غیرفعال‌سازی کنید. در این بخش، به بررسی دستورات و روش‌های مدیریت سرویس‌ها با systemd می‌پردازیم.

شروع، توقف و راه‌اندازی مجدد سرویس‌ها

شروع یک سرویس

برای شروع یک سرویس، از دستور systemctl start استفاده می‌کنید. به عنوان مثال، برای شروع سرویس Apache، دستور زیر را اجرا کنید:

sudo systemctl start apache2
Bash

توقف یک سرویس

برای توقف یک سرویس، از دستور systemctl stop استفاده می‌کنید. به عنوان مثال، برای توقف سرویس Apache، دستور زیر را اجرا کنید:

sudo systemctl stop apache2
Bash

راه‌اندازی مجدد یک سرویس

برای راه‌اندازی مجدد یک سرویس، از دستور systemctl restart استفاده می‌کنید. به عنوان مثال، برای راه‌اندازی مجدد سرویس Apache، دستور زیر را اجرا کنید:

sudo systemctl restart apache2
Bash

فعال و غیرفعال کردن سرویس‌ها

فعال‌سازی یک سرویس برای شروع خودکار در زمان بوت

برای فعال‌سازی یک سرویس به‌گونه‌ای که به طور خودکار در زمان بوت سیستم شروع شود، از دستور systemctl enable استفاده می‌کنید. به عنوان مثال، برای فعال‌سازی سرویس Apache، دستور زیر را اجرا کنید:

sudo systemctl enable apache2
Bash

غیرفعال‌سازی یک سرویس برای شروع خودکار در زمان بوت

برای غیرفعال‌سازی یک سرویس به‌گونه‌ای که در زمان بوت سیستم شروع نشود، از دستور systemctl disable استفاده می‌کنید. به عنوان مثال، برای غیرفعال‌سازی سرویس Apache، دستور زیر را اجرا کنید:

sudo systemctl disable apache2
Bash

بررسی وضعیت سرویس‌ها

برای بررسی وضعیت یک سرویس، از دستور systemctl status استفاده می‌کنید. این دستور اطلاعات مفیدی مانند وضعیت فعلی سرویس، لاگ‌های مرتبط و وابستگی‌ها را نمایش می‌دهد. به عنوان مثال، برای بررسی وضعیت سرویس Apache، دستور زیر را اجرا کنید:

systemctl status apache2
Bash

خروجی این دستور شامل اطلاعاتی مانند این است که آیا سرویس در حال اجرا است، چه زمانی شروع شده است و آیا خطایی رخ داده است یا خیر.

مدیریت سرویس‌ها در زمان بوت

systemd به شما امکان می‌دهد تا سرویس‌ها را به‌گونه‌ای پیکربندی کنید که در زمان بوت سیستم به طور خودکار شروع شوند. این کار با استفاده از دستور systemctl enable انجام می‌شود. به عنوان مثال، برای فعال‌سازی سرویس Nginx به‌گونه‌ای که در زمان بوت شروع شود، دستور زیر را اجرا کنید:

sudo systemctl enable nginx
Bash

مدیریت وابستگی‌های سرویس‌ها

systemd به طور خودکار وابستگی‌های بین سرویس‌ها را مدیریت می‌کند. به عنوان مثال، اگر سرویس A به سرویس B وابسته باشد، systemd اطمینان حاصل می‌کند که سرویس B قبل از سرویس A شروع شود. شما می‌توانید وابستگی‌های سرویس‌ها را در unit files با استفاده از بخش‌هایی مانند After و Requires تعریف کنید.

به عنوان مثال، در unit file زیر، سرویس mycustomservice پس از فعال‌شدن شبکه شروع می‌شود:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/usr/bin/myservice
Restart=on-failure

[Install]
WantedBy=multi-user.target
Ini

با این تنظیمات، systemd اطمینان حاصل می‌کند که سرویس mycustomservice تنها پس از فعال‌شدن شبکه شروع شود.

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

آموزش مرتبط:  نرم افزار اتصال به سرور لینوکس از طریق ویندوز

کار با unit files

unit files هسته‌ی اصلی مدیریت سرویس‌ها در systemd هستند. این فایل‌ها تعریف‌کننده‌ی سرویس‌ها، سوکت‌ها، دستگاه‌ها و سایر منابع سیستم هستند. در این بخش، به بررسی نحوه‌ی ایجاد، ویرایش و مدیریت unit files می‌پردازیم.

انواع unit files

systemd از انواع مختلفی از unit files پشتیبانی می‌کند که هر کدام برای مدیریت نوع خاصی از منابع سیستم استفاده می‌شوند. برخی از رایج‌ترین انواع unit files عبارتند از:

  • service: برای مدیریت سرویس‌ها.
  • socket: برای مدیریت سوکت‌ها و ارتباطات شبکه‌ای.
  • device: برای مدیریت دستگاه‌های سخت‌افزاری.
  • mount: برای مدیریت نقطه‌های mount.
  • automount: برای مدیریت mount خودکار.
  • swap: برای مدیریت فضای swap.
  • target: برای گروه‌بندی unit files و مدیریت حالت‌های سیستم.
  • timer: برای مدیریت وظایف زمان‌بندی شده.

ساختار unit files

هر unit file شامل بخش‌های مختلفی است که هر کدام تنظیمات خاصی را تعریف می‌کنند. برخی از بخش‌های رایج در unit files عبارتند از:

  • [Unit]: شامل اطلاعات کلی درباره‌ی unit، مانند توضیحات، وابستگی‌ها و شرایط شروع.
  • [Service]: شامل تنظیمات مربوط به سرویس، مانند دستور شروع، توقف و راه‌اندازی مجدد.
  • [Install]: شامل تنظیمات مربوط به نصب و فعال‌سازی unit.

مثال یک unit file ساده

در زیر یک مثال ساده از یک unit file برای یک سرویس سفارشی آورده شده است:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/usr/bin/myservice
Restart=on-failure

[Install]
WantedBy=multi-user.target
Ini

در این مثال:

  • Description: توضیح کوتاهی درباره‌ی سرویس ارائه می‌دهد.
  • After: مشخص می‌کند که این سرویس پس از فعال‌شدن شبکه شروع شود.
  • ExecStart: دستوری که برای شروع سرویس اجرا می‌شود.
  • Restart: تعیین می‌کند که در صورت شکست سرویس، به طور خودکار راه‌اندازی مجدد شود.
  • WantedBy: مشخص می‌کند که این سرویس در حالت multi-user.target فعال شود.

ایجاد و ویرایش unit files

برای ایجاد یک unit file جدید، می‌توانید از یک ویرایشگر متن مانند nano یا vim استفاده کنید. به عنوان مثال، برای ایجاد یک unit file جدید با نام mycustomservice.service، دستور زیر را اجرا کنید:

sudo nano /etc/systemd/system/mycustomservice.service
Bash

سپس محتوای unit file را وارد کنید و فایل را ذخیره کنید. پس از ایجاد unit file، باید systemd را مجدداً بارگیری کنید تا تغییرات اعمال شوند:

sudo systemctl daemon-reload
Bash

فعال‌سازی و شروع سرویس

پس از ایجاد unit file، می‌توانید سرویس را فعال‌سازی و شروع کنید. برای فعال‌سازی سرویس، از دستور زیر استفاده کنید:

sudo systemctl enable mycustomservice
Bash

برای شروع سرویس، از دستور زیر استفاده کنید:

sudo systemctl start mycustomservice
Bash

بررسی وضعیت سرویس

برای بررسی وضعیت سرویس، از دستور systemctl status استفاده کنید:

systemctl status mycustomservice
Bash

این دستور اطلاعات مفیدی مانند وضعیت فعلی سرویس، لاگ‌های مرتبط و وابستگی‌ها را نمایش می‌دهد.

ویرایش unit files موجود

برای ویرایش unit files موجود، می‌توانید از ویرایشگر متن استفاده کنید. به عنوان مثال، برای ویرایش unit file apache2.service، دستور زیر را اجرا کنید:

sudo nano /etc/systemd/system/apache2.service
Bash

پس از اعمال تغییرات، systemd را مجدداً بارگیری کنید:

sudo systemctl daemon-reload
Bash

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

sudo systemctl restart apache2
Bash

در این بخش، نحوه‌ی کار با unit files را بررسی کردیم. از ایجاد و ویرایش unit files گرفته تا فعال‌سازی و شروع سرویس‌ها، همه‌ی این موارد را به طور کامل پوشش دادیم. در بخش بعدی، به بررسی نحوه‌ی مدیریت لاگ‌ها با استفاده از journald خواهیم پرداخت.

مدیریت لاگ‌ها با journald

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

معرفی journald

journald یک سیستم لاگ‌گیری باینری است که لاگ‌ها را به صورت ساختار یافته ذخیره می‌کند. این سیستم امکان جستجوی پیشرفته‌ی لاگ‌ها، فیلتر کردن بر اساس معیارهای مختلف و نمایش لاگ‌ها به صورت بلادرنگ را فراهم می‌کند. برخی از مزایای journald عبارتند از:

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

دستورات پایه‌ای برای مدیریت لاگ‌ها با journalctl

برای مدیریت لاگ‌ها با journald، از دستور journalctl استفاده می‌کنید. برخی از دستورات پایه‌ای عبارتند از:

نمایش تمام لاگ‌ها

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

journalctl
Bash

این دستور تمام لاگ‌های سیستم را به ترتیب زمانی نمایش می‌دهد.

نمایش لاگ‌های یک سرویس خاص

برای نمایش لاگ‌های مربوط به یک سرویس خاص، از دستور زیر استفاده کنید:

journalctl -u servicename
Bash

به عنوان مثال، برای نمایش لاگ‌های سرویس Apache، دستور زیر را اجرا کنید:

journalctl -u apache2
Bash

نمایش لاگ‌های بلادرنگ

برای نمایش لاگ‌ها به صورت بلادرنگ، از دستور زیر استفاده کنید:

journalctl -f
Bash

این دستور لاگ‌ها را به صورت بلادرنگ نمایش می‌دهد و به شما امکان می‌دهد تا تغییرات را به صورت لحظه‌ای مشاهده کنید.

فیلتر کردن لاگ‌ها بر اساس زمان

برای فیلتر کردن لاگ‌ها بر اساس زمان، از دستور زیر استفاده کنید:

journalctl --since "2023-10-01" --until "2023-10-02"
Bash

این دستور لاگ‌های بین تاریخ 1 اکتبر 2023 و 2 اکتبر 2023 را نمایش می‌دهد.

فیلتر کردن لاگ‌ها بر اساس سطح اهمیت

برای فیلتر کردن لاگ‌ها بر اساس سطح اهمیت، از دستور زیر استفاده کنید:

journalctl -p err
Bash

این دستور لاگ‌های با سطح اهمیت “error” را نمایش می‌دهد. سطوح اهمیت دیگر عبارتند از:

  • emerg (0): شرایط اضطراری
  • alert (1): هشدار
  • crit (2): بحرانی
  • err (3): خطا
  • warning (4): هشدار
  • notice (5): اطلاعیه
  • info (6): اطلاعات
  • debug (7): اشکال‌زدایی

مدیریت حجم لاگ‌ها

journald به طور پیش‌فرض لاگ‌ها را در یک فایل باینری ذخیره می‌کند. برای مدیریت حجم لاگ‌ها، می‌توانید تنظیمات مربوط به journald را در فایل /etc/systemd/journald.conf ویرایش کنید. برخی از تنظیمات مهم عبارتند از:

  • SystemMaxUse: حداکثر حجمی که لاگ‌ها می‌توانند در سیستم اشغال کنند.
  • SystemKeepFree: حداقل فضای آزادی که باید در سیستم باقی بماند.
  • SystemMaxFileSize: حداکثر حجم هر فایل لاگ.
  • SystemMaxFiles: حداکثر تعداد فایل‌های لاگ.

به عنوان مثال، برای محدود کردن حجم لاگ‌ها به 500 مگابایت، تنظیمات زیر را در فایل /etc/systemd/journald.conf وارد کنید:

SystemMaxUse=500M
Ini

پس از اعمال تغییرات، journald را مجدداً راه‌اندازی کنید:

sudo systemctl restart systemd-journald
Bash

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

جمع‌بندی

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

نکات کلیدی

  1. معرفی systemd: systemd یک سیستم init مدرن است که مدیریت سرویس‌ها، دستگاه‌ها، شبکه و لاگ‌ها را به صورت یکپارچه و کارآمد انجام می‌دهد.
  2. نصب و پیکربندی: systemd به طور پیش‌فرض در بسیاری از توزیع‌های لینوکس نصب شده است، اما در صورت نیاز می‌توان آن را نصب و پیکربندی کرد.
  3. مدیریت سرویس‌ها: با استفاده از دستورات systemctl، می‌توانید سرویس‌ها را شروع، توقف، راه‌اندازی مجدد، فعال‌سازی و غیرفعال‌سازی کنید.
  4. کار با unit files: unit files هسته‌ی اصلی مدیریت سرویس‌ها در systemd هستند و امکان ایجاد و ویرایش سرویس‌های سفارشی را فراهم می‌کنند.
  5. مدیریت لاگ‌ها: journald یک سیستم لاگ‌گیری پیشرفته است که امکان ذخیره‌سازی، جستجو و فیلتر کردن لاگ‌ها را به صورت ساختار یافته فراهم می‌کند.

نتیجه‌گیری

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

backendbaz

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*