SYSTEMD-POWEROFF.SERVICE(8) systemd-poweroff.service SYSTEMD-POWEROFF.SERVICE(8)

systemd-poweroff.service, systemd-halt.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown - منطق خاموش‌سازی سیستم

systemd-poweroff.service

systemd-halt.service

systemd-reboot.service

systemd-kexec.service

/usr/lib/systemd/systemd-shutdown

/usr/lib/systemd/system-shutdown/

systemd-poweroff.service یک سرویس سیستمی است که توسط poweroff.target فراخوانی می‌شود و مسئول عملیات واقعی خاموش کردن سیستم (power-off) است. به‌طور مشابه، systemd-halt.service توسط halt.target، systemd-reboot.service توسط reboot.target و systemd-kexec.service توسط kexec.target فراخوانی می‌شوند تا اقدامات مربوطه را اجرا کنند.

هنگامی که این سرویس‌ها اجرا می‌شوند، اطمینان حاصل می‌کنند که باینری /usr/lib/systemd/systemd-shutdown جایگزین PID 1 شود که سپس مسئول فرایند خاموش‌سازی نهایی خواهد بود. پیش از خاموش کردن، این باینری تلاش می‌کند تمام سیستم‌های فایل باقیمانده را unmount کند (یا دست‌کم آن‌ها را به‌صورت فقط‌خواندنی مجدداً mount کند)، تمام دستگاه‌های سواپ (swap) باقیمانده را غیرفعال کند، تمام دستگاه‌های ذخیره‌سازی باقیمانده را جدا کند و تمام فرایندهای باقیمانده را خاتمه دهد.

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

کمی پیش از اجرای عملیات واقعیِ خاموش کردن، متوقف‌سازی، راه‌اندازی مجدد یا kexec سیستم، systemd-shutdown تمام فایل‌های اجرایی موجود در /usr/lib/systemd/system-shutdown/ را اجرا خواهد کرد. این فایل‌های اجرایی با یک آرگومان فراخوانی می‌شوند: بسته به اقدام انتخاب‌شده، یکی از مقادیر "poweroff"، "halt"، "reboot" یا "kexec". تمام فایل‌های اجرایی موجود در این دایرکتوری به‌صورت موازی اجرا می‌شوند، و پیش از پایان کار همهٔ آن‌ها، اقدام اصلی ادامه نخواهد یافت. (البته یک مهلت زمانی ایمنی ۹۰ ثانیه‌ای اعمال می‌شود.) توجه داشته باشید که این فایل‌های اجرایی پس از خاموش شدن همهٔ سرویس‌ها و پس از unmount شدن بیشتر مانت‌ها اجرا می‌شوند (اگرچه سیستم فایل ریشه و همچنین /run/ و سیستم‌های فایل گوناگون API همچنان دردسترس هستند). این بدان معناست که هر برنامه‌ای که در این دایرکتوری قرار داده می‌شود باید برای اجرا در چنین محیط محدودی آماده باشد و به فعال بودن (یا قابل نوشتن بودن) سرویس‌های خارجی یا سلسله‌مراتب‌هایی مانند /var/ وابسته نباشد.

توجه داشته باشید که systemd-poweroff.service (و واحدهای مرتبط با آن) هرگز نباید به‌طور مستقیم اجرا شوند. در عوض، خاموش‌سازی سیستم را با دستوری مانند "systemctl poweroff" آغاز کنید.

شکل دیگری از خاموش‌سازی توسط قابلیت systemd-soft-reboot.service(8) ارائه شده است. این قابلیت تنها فضای کاربری (userspace) سیستم‌عامل را مجدداً راه‌اندازی می‌کند و هسته، سفت‌افزار و سخت‌افزار را به همان شکل باقی می‌گذارد.

systemd(1), systemctl(1), systemd.special(7), reboot(2), systemd-suspend.service(8), systemd-soft-reboot.service(8), bootup(7)

systemd 261.2