فرایندها، systemd و journalctl
فرایند چیست؟
هر برنامهٔ در حال اجرا یک یا چند فرایند دارد. هر فرایند شناسهای به نام PID دارد و معمولاً از یک فرایند والد ایجاد شده است. هنگام عیبیابی، ابتدا باید بدانید چه چیزی اجرا میشود، با کدام کاربر اجرا میشود و چه مقدار CPU یا حافظه مصرف میکند.
ps auxنمایی کامل از فرایندهای فعلی میدهد.pgrep -aفرایندهای منطبق با نام را همراه آرگومانهای اجرای آنها پیدا میکند.topنمای زنده از مصرف منابع است؛ باqاز آن خارج شوید.
یک دستور طولانی را با & در پسزمینه اجرا کنید. jobs فقط کارهای shell فعلی را نشان میدهد؛ fg کار را به پیشزمینه میآورد:
سیگنالها و توقف فرایند
برای درخواست توقف یک فرایند از سیگنال استفاده میشود. SIGTERM درخواست مودبانه برای پایان کار است و به برنامه فرصت میدهد فایلها و اتصالها را ببندد. SIGKILL قابلمدیریت نیست و فقط باید آخرین راه باشد:
پیش از ارسال سیگنال، PID و مالک فرایند را بررسی کنید. kill -9 بدون بررسی میتواند داده را خراب کند یا سرویس وابسته را از کار بیندازد. برای سرویسهای systemd، از systemctl استفاده کنید تا مدیر سرویس وضعیت را درست نگه دارد.
systemd و unitها
در بسیاری از توزیعهای امروز، systemd فرایند آغازین و مدیر سرویس است. systemd رفتار مؤلفههای سامانه را در فایلهایی به نام unit تعریف میکند. رایجترین نوعها service، socket، timer و target هستند.
برای مشاهده و کنترل یک سرویس، نام unit را کامل بنویسید. نام سرویس SSH بسته به توزیع میتواند ssh.service یا sshd.service باشد:
startوstopوضعیت اکنون را تغییر میدهند.enableاجرای سرویس را در راهاندازی بعدی فعال میکند؛ بهتنهایی سرویس را همین حالا اجرا نمیکند.enable --nowسرویس را برای راهاندازیهای بعدی فعال و همزمان همین حالا اجرا میکند.restartبرای اعمال پیکربندی جدید یا بازگرداندن سرویس پس از خطا مفید است، اما پیش از آن اثر وقفهٔ کوتاه را در نظر بگیرید.
فهرست سرویسهای ناموفق، نقطهٔ شروع خوبی برای بررسی وضعیت سامانه است:
خواندن لاگها با journalctl
journald رویدادهای systemd، هسته و سرویسهایی که به journal مینویسند را جمع میکند. journalctl به جای جستوجوی پراکنده در چند فایل لاگ، راهی یکپارچه برای بررسی این رویدادهاست.
-uلاگ یک unit را محدود میکند.-bفقط رویدادهای راهاندازی فعلی را نشان میدهد؛-b -1راهاندازی قبلی است.-p warning..alertسطحهای warning و شدیدتر را انتخاب میکند.-fمانندtail -fمنتظر رویدادهای جدید میماند.
برای عیبیابی یک سرویس، این ترتیب ساده را دنبال کنید: systemctl status را بخوانید، لاگ همان unit را با journalctl -u ببینید، زمان رویداد را محدود کنید، پیکربندی را بررسی کنید و سپس تنها در صورت نیاز سرویس را بازراهاندازی کنید.
منابع یادگیری
مستندات و مقالات
- systemd for Administrators — آموزش جامع مفاهیم و کاربردهای systemd
- ۱۰۳.۵ - ایجاد، پایش و پایاندادن به فرایندها - کتاب LPIC1 جادی — مقالهٔ مرتبط با مدیریت فرایندها و سیگنالها
- ۱۰۸.۲ - لاگهای سیستم - کتاب LPIC1 جادی — مقالهٔ مرتبط با لاگهای سیستمی، rsyslog و journal - بخش journalctl مدنظر است
ویدیو
- الپیک ۱ - ۰۳۳ - ۱۰۳.۵ - مدیریت پروسهها در لینوکس (۳ قسمت) - جادی — آشنایی با مدیریت processها در Linux
- الپیک ۱ - ۰۶۵ - ۱۰۸.۲ - ۳/۳ - لاگهای سیستم، بررسی و مدیریت لاگها با journalctl از systemd — آشنایی با مدیریت لاگها با journalctl در لینوکس
- systemd Explained - Learn Linux TV — معرفی نقش systemd در مدیریت سرویسها