در دنیای لینوکس، مدیریت سرویسها یکی از وظایف حیاتی برای ادمینها و کاربران پیشرفته است. 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:
- در توزیعهای مبتنی بر Red Hat/CentOS:
- در توزیعهای مبتنی بر Arch Linux:
پس از نصب، میتوانید با دستور زیر از نسخهی نصبشدهی systemd اطمینان حاصل کنید:
پیکربندی 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 برای یک سرویس سفارشی آورده شده است:
در این مثال:
- Description: توضیح کوتاهی دربارهی سرویس ارائه میدهد.
- After: مشخص میکند که این سرویس پس از فعالشدن شبکه شروع شود.
- ExecStart: دستوری که برای شروع سرویس اجرا میشود.
- Restart: تعیین میکند که در صورت شکست سرویس، به طور خودکار راهاندازی مجدد شود.
- WantedBy: مشخص میکند که این سرویس در حالت multi-user.target فعال شود.
دستورات پایهای برای مدیریت systemd
برای مدیریت systemd، از دستور systemctl
استفاده میشود. برخی از دستورات پایهای عبارتند از:
- بررسی وضعیت systemd:
- شروع یک سرویس:
- توقف یک سرویس:
- راهاندازی مجدد یک سرویس:
- فعالسازی یک سرویس برای شروع خودکار در زمان بوت:
- غیرفعالسازی یک سرویس برای شروع خودکار در زمان بوت:
با این دستورات، میتوانید به راحتی سرویسهای خود را مدیریت کنید. در بخش بعدی، به بررسی جزئیات بیشتر دربارهی مدیریت سرویسها با systemd خواهیم پرداخت.
مدیریت سرویسها با systemd
مدیریت سرویسها یکی از اصلیترین وظایف systemd است. با استفاده از systemd، میتوانید سرویسها را شروع، توقف، راهاندازی مجدد، فعالسازی و غیرفعالسازی کنید. در این بخش، به بررسی دستورات و روشهای مدیریت سرویسها با systemd میپردازیم.
شروع، توقف و راهاندازی مجدد سرویسها
شروع یک سرویس
برای شروع یک سرویس، از دستور systemctl start
استفاده میکنید. به عنوان مثال، برای شروع سرویس Apache، دستور زیر را اجرا کنید:
توقف یک سرویس
برای توقف یک سرویس، از دستور systemctl stop
استفاده میکنید. به عنوان مثال، برای توقف سرویس Apache، دستور زیر را اجرا کنید:
راهاندازی مجدد یک سرویس
برای راهاندازی مجدد یک سرویس، از دستور systemctl restart
استفاده میکنید. به عنوان مثال، برای راهاندازی مجدد سرویس Apache، دستور زیر را اجرا کنید:
فعال و غیرفعال کردن سرویسها
فعالسازی یک سرویس برای شروع خودکار در زمان بوت
برای فعالسازی یک سرویس بهگونهای که به طور خودکار در زمان بوت سیستم شروع شود، از دستور systemctl enable
استفاده میکنید. به عنوان مثال، برای فعالسازی سرویس Apache، دستور زیر را اجرا کنید:
غیرفعالسازی یک سرویس برای شروع خودکار در زمان بوت
برای غیرفعالسازی یک سرویس بهگونهای که در زمان بوت سیستم شروع نشود، از دستور systemctl disable
استفاده میکنید. به عنوان مثال، برای غیرفعالسازی سرویس Apache، دستور زیر را اجرا کنید:
بررسی وضعیت سرویسها
برای بررسی وضعیت یک سرویس، از دستور systemctl status
استفاده میکنید. این دستور اطلاعات مفیدی مانند وضعیت فعلی سرویس، لاگهای مرتبط و وابستگیها را نمایش میدهد. به عنوان مثال، برای بررسی وضعیت سرویس Apache، دستور زیر را اجرا کنید:
خروجی این دستور شامل اطلاعاتی مانند این است که آیا سرویس در حال اجرا است، چه زمانی شروع شده است و آیا خطایی رخ داده است یا خیر.
مدیریت سرویسها در زمان بوت
systemd به شما امکان میدهد تا سرویسها را بهگونهای پیکربندی کنید که در زمان بوت سیستم به طور خودکار شروع شوند. این کار با استفاده از دستور systemctl enable
انجام میشود. به عنوان مثال، برای فعالسازی سرویس Nginx بهگونهای که در زمان بوت شروع شود، دستور زیر را اجرا کنید:
مدیریت وابستگیهای سرویسها
systemd به طور خودکار وابستگیهای بین سرویسها را مدیریت میکند. به عنوان مثال، اگر سرویس A به سرویس B وابسته باشد، systemd اطمینان حاصل میکند که سرویس B قبل از سرویس A شروع شود. شما میتوانید وابستگیهای سرویسها را در unit files با استفاده از بخشهایی مانند After
و Requires
تعریف کنید.
به عنوان مثال، در unit file زیر، سرویس mycustomservice
پس از فعالشدن شبکه شروع میشود:
با این تنظیمات، 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 برای یک سرویس سفارشی آورده شده است:
در این مثال:
- Description: توضیح کوتاهی دربارهی سرویس ارائه میدهد.
- After: مشخص میکند که این سرویس پس از فعالشدن شبکه شروع شود.
- ExecStart: دستوری که برای شروع سرویس اجرا میشود.
- Restart: تعیین میکند که در صورت شکست سرویس، به طور خودکار راهاندازی مجدد شود.
- WantedBy: مشخص میکند که این سرویس در حالت multi-user.target فعال شود.
ایجاد و ویرایش unit files
برای ایجاد یک unit file جدید، میتوانید از یک ویرایشگر متن مانند nano
یا vim
استفاده کنید. به عنوان مثال، برای ایجاد یک unit file جدید با نام mycustomservice.service
، دستور زیر را اجرا کنید:
سپس محتوای unit file را وارد کنید و فایل را ذخیره کنید. پس از ایجاد unit file، باید systemd را مجدداً بارگیری کنید تا تغییرات اعمال شوند:
فعالسازی و شروع سرویس
پس از ایجاد unit file، میتوانید سرویس را فعالسازی و شروع کنید. برای فعالسازی سرویس، از دستور زیر استفاده کنید:
برای شروع سرویس، از دستور زیر استفاده کنید:
بررسی وضعیت سرویس
برای بررسی وضعیت سرویس، از دستور systemctl status
استفاده کنید:
این دستور اطلاعات مفیدی مانند وضعیت فعلی سرویس، لاگهای مرتبط و وابستگیها را نمایش میدهد.
ویرایش unit files موجود
برای ویرایش unit files موجود، میتوانید از ویرایشگر متن استفاده کنید. به عنوان مثال، برای ویرایش unit file apache2.service
، دستور زیر را اجرا کنید:
پس از اعمال تغییرات، systemd را مجدداً بارگیری کنید:
سپس سرویس را مجدداً راهاندازی کنید تا تغییرات اعمال شوند:
در این بخش، نحوهی کار با unit files را بررسی کردیم. از ایجاد و ویرایش unit files گرفته تا فعالسازی و شروع سرویسها، همهی این موارد را به طور کامل پوشش دادیم. در بخش بعدی، به بررسی نحوهی مدیریت لاگها با استفاده از journald خواهیم پرداخت.
مدیریت لاگها با journald
journald یکی از اجزای اصلی systemd است که مسئولیت جمعآوری و مدیریت لاگهای سیستم را بر عهده دارد. این سیستم جایگزین syslog قدیمی شده و امکانات پیشرفتهتری برای ذخیرهسازی، جستجو و تحلیل لاگها ارائه میدهد. در این بخش، به بررسی نحوهی استفاده از journald برای مدیریت لاگها میپردازیم.
معرفی journald
journald یک سیستم لاگگیری باینری است که لاگها را به صورت ساختار یافته ذخیره میکند. این سیستم امکان جستجوی پیشرفتهی لاگها، فیلتر کردن بر اساس معیارهای مختلف و نمایش لاگها به صورت بلادرنگ را فراهم میکند. برخی از مزایای journald عبارتند از:
- ذخیرهسازی ساختار یافته: لاگها به صورت ساختار یافته و با متادیتاهای مرتبط ذخیره میشوند.
- جستجوی پیشرفته: امکان جستجوی لاگها بر اساس معیارهای مختلف مانند زمان، واحد سیستم و پیام.
- نمایش بلادرنگ: امکان نمایش لاگها به صورت بلادرنگ و فیلتر کردن آنها.
- مدیریت حجم لاگها: امکان تنظیم حجم و مدت زمان ذخیرهسازی لاگها.
دستورات پایهای برای مدیریت لاگها با journalctl
برای مدیریت لاگها با journald، از دستور journalctl
استفاده میکنید. برخی از دستورات پایهای عبارتند از:
نمایش تمام لاگها
برای نمایش تمام لاگها، از دستور زیر استفاده کنید:
این دستور تمام لاگهای سیستم را به ترتیب زمانی نمایش میدهد.
نمایش لاگهای یک سرویس خاص
برای نمایش لاگهای مربوط به یک سرویس خاص، از دستور زیر استفاده کنید:
به عنوان مثال، برای نمایش لاگهای سرویس Apache، دستور زیر را اجرا کنید:
نمایش لاگهای بلادرنگ
برای نمایش لاگها به صورت بلادرنگ، از دستور زیر استفاده کنید:
این دستور لاگها را به صورت بلادرنگ نمایش میدهد و به شما امکان میدهد تا تغییرات را به صورت لحظهای مشاهده کنید.
فیلتر کردن لاگها بر اساس زمان
برای فیلتر کردن لاگها بر اساس زمان، از دستور زیر استفاده کنید:
این دستور لاگهای بین تاریخ 1 اکتبر 2023 و 2 اکتبر 2023 را نمایش میدهد.
فیلتر کردن لاگها بر اساس سطح اهمیت
برای فیلتر کردن لاگها بر اساس سطح اهمیت، از دستور زیر استفاده کنید:
این دستور لاگهای با سطح اهمیت “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
وارد کنید:
پس از اعمال تغییرات، journald را مجدداً راهاندازی کنید:
در این بخش، نحوهی مدیریت لاگها با استفاده از journald را بررسی کردیم. از نمایش و فیلتر کردن لاگها گرفته تا مدیریت حجم آنها، همهی این موارد را به طور کامل پوشش دادیم. در بخش بعدی، به بررسی روشهای اشکالزدایی و عیبیابی سرویسها با استفاده از systemd خواهیم پرداخت.
جمعبندی
در این مقاله، به بررسی جامع مدیریت سرویسها با استفاده از systemd پرداختیم. از معرفی systemd و مزایای آن نسبت به سیستم init قدیمی شروع کردیم و سپس به بررسی نحوهی نصب و پیکربندی systemd پرداختیم. در ادامه، روشهای مدیریت سرویسها، کار با unit files و مدیریت لاگها با journald را به تفصیل شرح دادیم.
نکات کلیدی
- معرفی systemd: systemd یک سیستم init مدرن است که مدیریت سرویسها، دستگاهها، شبکه و لاگها را به صورت یکپارچه و کارآمد انجام میدهد.
- نصب و پیکربندی: systemd به طور پیشفرض در بسیاری از توزیعهای لینوکس نصب شده است، اما در صورت نیاز میتوان آن را نصب و پیکربندی کرد.
- مدیریت سرویسها: با استفاده از دستورات
systemctl
، میتوانید سرویسها را شروع، توقف، راهاندازی مجدد، فعالسازی و غیرفعالسازی کنید. - کار با unit files: unit files هستهی اصلی مدیریت سرویسها در systemd هستند و امکان ایجاد و ویرایش سرویسهای سفارشی را فراهم میکنند.
- مدیریت لاگها: journald یک سیستم لاگگیری پیشرفته است که امکان ذخیرهسازی، جستجو و فیلتر کردن لاگها را به صورت ساختار یافته فراهم میکند.
نتیجهگیری
systemd ابزاری قدرتمند و انعطافپذیر برای مدیریت سیستمهای لینوکس است. با تسلط بر systemd، میتوانید سرویسها را به طور کارآمد مدیریت کنید، لاگها را به صورت پیشرفته تحلیل کنید و سیستم خود را بهینهسازی نمایید. امیدواریم این مقاله به شما در درک و استفاده از systemd کمک کرده باشد. برای مطالعهی بیشتر، میتوانید به مستندات رسمی systemd مراجعه کنید.
دیدگاهها