SYSTEMD-SUSPEND.SERVICE(8) systemd-suspend.service SYSTEMD-SUSPEND.SERVICE(8)

systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-suspend-then-hibernate.service, systemd-sleep - منطق وضعیت‌های خواب سیستم

systemd-suspend.service
systemd-hibernate.service
systemd-hybrid-sleep.service
systemd-suspend-then-hibernate.service
/usr/lib/systemd/system-sleep

systemd-suspend.service یک سرویس سیستمی است که توسط suspend.target فراخوانی می‌شود و مسئول تعلیق واقعی سیستم است. به طور مشابه، systemd-hibernate.service توسط hibernate.target برای اجرای خواب زمستانی واقعی فراخوانی می‌شود. در نهایت، systemd-hybrid-sleep.service توسط hybrid-sleep.target برای اجرای خواب زمستانی ترکیبی با تعلیق سیستم فراخوانی می‌شود و توسط suspend-then-hibernate.target برای اجرای تعلیق سیستم با یک مهلت زمانی که بعداً خواب زمستانی را فعال خواهد کرد فراخوانی می‌شود.

بلافاصله پیش از ورود به وضعیت تعلیق سیستم و/یا خواب زمستانی، systemd-suspend.service (و به ترتیب سایر واحدهای ذکر شده) تمام فایل‌های اجرایی موجود در /usr/lib/systemd/system-sleep/ را اجرا کرده و دو آرگومان به آن‌ها ارسال می‌کنند. آرگومان نخست "pre" و آرگومان دوم بسته به اقدام انتخاب‌شده یکی از مقادیر "suspend"، "hibernate"، "hybrid-sleep" یا "suspend-then-hibernate" خواهد بود. یک متغیر محیطی به نام "SYSTEMD_SLEEP_ACTION" تنظیم خواهد شد و شامل اقدام خوابی است که در حال پردازش است. این متغیر در درجه اول برای "suspend-then-hibernate" مفید است که در آن مقدار متغیر برابر با "suspend"، "hibernate" یا در مواردی که خواب زمستانی با شکست مواجه شده است "suspend-after-failed-hibernate" خواهد بود. بلافاصله پس از خروج از تعلیق سیستم و/یا خواب زمستانی، همان فایل‌های اجرایی اجرا می‌شوند، اما اکنون آرگومان نخست "post" است. تمام فایل‌های اجرایی موجود در این شاخه به صورت موازی اجرا می‌شوند و اجرای اقدام تا زمانی که تمام فایل‌های اجرایی به پایان نرسند ادامه نمی‌یابد. توجه داشته باشید که user.slice در حین اجرای فایل‌های اجرایی منجمد خواهد شد، بنابراین آن‌ها نباید تلاشی برای ارتباط با سرویس‌های کاربری به امید دریافت پاسخ انجام دهند.

توجه داشته باشید که اسکریپت‌ها یا باینری‌های قرار داده‌شده در /usr/lib/systemd/system-sleep/ صرفاً برای استفاده محلی در نظر گرفته شده‌اند و باید به عنوان راهکارهای موقت تلقی شوند. اگر برنامه‌ها می‌خواهند به تعلیق/خواب زمستانی سیستم و ازسرگیری آن واکنش نشان دهند، بهتر است از قفل‌های بازدارنده (Inhibitor Locks)[1] استفاده کنند.

توجه داشته باشید که systemd-suspend.service، systemd-hibernate.service، systemd-hybrid-sleep.service و systemd-suspend-then-hibernate.service هرگز نباید به طور مستقیم اجرا شوند. در عوض، وضعیت خواب سیستم را با دستوری مانند systemctl suspend یا systemctl hibernate آغاز کنید.

درون این سرویس، رشته‌ای مانند "mem" را در /sys/power/state می‌نویسد تا تعلیق واقعی سیستم را آغاز کند. این که دقیقاً چه چیزی در کجا نوشته شود را می‌توان در بخش [Sleep] در فایل /etc/systemd/sleep.conf یا فایل‌های sleep.conf.d پیکربندی کرد. systemd-sleep.conf(5) را ببینید.

توجه داشته باشید که به طور پیش‌فرض این سرویس‌ها در حین اجرا user.slice را منجمد می‌کنند. این کار از اجرای هرگونه فرایند در هر یک از نشست‌های کاربری در زمان ورود سیستم به حالت خواب و ازسرگیری از آن جلوگیری می‌کند. در نتیجه، این امر مانع از ارتباط قلاب‌ها (hooks) در /usr/lib/systemd/system-sleep/، یا هر فرایند دیگر، با فرایندهای نشست‌های کاربری در طول خواب می‌شود.

systemd-sleep دستورهای زیر را می‌فهمد:

-h, --help

یک متن راهنمای کوتاه چاپ کرده و خارج می‌شود.

--version

یک رشته نسخه کوتاه چاپ کرده و خارج می‌شود.

suspend, hibernate, suspend-then-hibernate, hybrid-sleep

سیستم را به حالت تعلیق (suspend)، خواب زمستانی (hibernate)، تعلیق و سپس خواب زمستانی، یا خواب ترکیبی (hybrid sleep) می‌برد.

افزوده شده در نسخه 203.

systemd-sleep.conf(5), systemd(1), systemctl(1), systemd.special(7), systemd-halt.service(8)

1.
قفل‌های بازدارنده (Inhibitor Locks)
systemd 261.2