亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

linux 定時休眠的實現思路

2024-09-05 23:04:50
字體:
來源:轉載
供稿:網友

最近公司規定晚上走人后必須關閉電腦,但是像我們這樣的人,經常會忘記了關閉電腦,而且關閉電腦之后再恢復工作環境也是件挺麻煩的事情,無奈之下只能折騰一下,讓linux定時休眠了。

休眠的類型

目前大概由三種類型的休眠:

suspend(suspend to RAM)

指的是除了內存以外的大部分機器部件都進入斷電狀態。 這種休眠狀態恢復速度特別快,但由于內存中的數據并沒有被保存下來,因此這個狀態的系統并沒有進入真正意義上的休眠狀態,還在持續耗電。

hibernate(suspend to disk)

這種休眠會將內存中的系統狀態寫入交換空間內,當系統啟動時就可以從交換空間內讀回系統狀態。 這種情況下系統可以完全斷電,但由于要保存/讀取系統狀態到/從交換空間,因此速度會比較慢,而且需要進行一些配置(下面會說到)

hybrid(suspend to both)

結合了上面兩種休眠類型。它像hibernate一樣將系統狀態存入交換空間內,同時也像suspend一樣并不關閉電源。 這種,在電源未耗盡之前,它能很快的從休眠狀態恢復。而若休眠期間電源耗盡,則它可以從交換空間中恢復系統狀態。

suspend 休眠

進入 suspend 特別簡單,無需額外的配置,在 systemd 系統上直接執行 systemctl suspend 就行了。/

systemctl suspend

它的實際動作由 systemd-suspend.service 所定義, 在 archlinux 上,它長成這樣子的:

# SPDX-License-Identifier: LGPL-2.1+## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.[Unit]Description=SuspendDocumentation=man:systemd-suspend.service(8)DefaultDependencies=noRequires=sleep.targetAfter=sleep.target[Service]Type=oneshotExecStart=/usr/lib/systemd/systemd-sleep suspend

Hibernation 休眠

由于 hibernation 休眠要求將內存中的內容寫入到交換空間中,因此你至少要有一個空間大于內存的交換分區或者交換文件。 (其實若交換空間不夠內存大也不是一定就無法進行hibernation休眠,可以嘗試運行 echo 0 |sudo tee /sys/power/image_size, 這會讓系統在寫入交換空間時盡可能的進行壓縮,但這種方法也無法保證一定能夠休眠成功)

若之前沒有創建交換分區,那么可以臨時創建一個交換文件來用。比如下面命令創建一個5G的交換文件

sudo dd if=/dev/zero of=/swapfile bs=10240 count=524288sudo mkswap /swapfilesudo chmod 0600 /swapfilesudo swapon /swapfilesudo cp /etc/fstab /etc/fstab.bakecho "/swapfile swap swap default 0 0" |tee -a /etc/fstabSetting up swapspace version 1, size = 5 GiB (5368705024 bytes)no label, UUID=d0f0c682-e1fa-416f-8fe2-b554b8ca363a/swapfile swap swap default 0 0

除此創建交換分區之外,我們還需要修改kernel的啟動參數,讓系統在啟動時先嘗試從交換空間中恢復狀態。 具體操作如下:

1. 如果使用交換分區來保存,則只需要為添加kernel的啟動參數 resume=交換分區 即可

(1) 查看那塊分區是交換分區

swapon

NAME  TYPE  SIZE USED PRIO/dev/sda2 partition 8G 280K -2/swapfile file  5G 0B -3

可以看出交換分區為 /dev/sda2

(2) 修改 /etc/default/grub, 為 GRUB_CMDLINE_LINUX_DEFAULT 行添加參數 resume=/dev/sda2

sudo sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/ s!"$! resume=/dev/sda2"!' /etc/default/grub

2. 如果是使用交換文件,則需要添加兩個參數 resume=交換文件所在磁盤 以及 resume_offset=交換文件在磁盤中的偏移位置:

(1) 查看交換文件所在磁盤

df /swapfile

文件系統          1K-塊     已用     可用 已用% 掛載點
/dev/sda3      55253696 27582224 24834972   53% /

說明磁盤為 /dev/sda3

(2) 查看交換文件的偏移位置

sudo filefrag -v /swapfile|head -5Filesystem type is: ef53File size of /swapfile is 5368709120 (1310720 blocks of 4096 bytes) ext:  logical_offset:  physical_offset: length: expected: flags: 0:  0.. 32767: 4653056.. 4685823: 32768:    1: 32768.. 65535: 4685824.. 4718591: 32768:

這里可以看出物理偏移位置時4653056

(3) 修改 /etc/default/grub, 為 GRUB_CMDLINE_LINUX_DEFAULT 行添加參數 resume=/dev/sda3 resume_offset=4653056

sudo sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/ s!"$! resume=/dev/sda3 resume_offset=4653056"!' /etc/default/grub

3. 重新生成 grub.cfg 文件

sudo grub-mkconfig -o /boot/grub/grub.cfg

(1) 配置initramfs添加 resume hook 修改 /etc/mkinitcpio.conf 文件,在 HOOKS 中添加 resume

sudo sed -i '/^HOOKS=/ s/)/ resume)/' /etc/mkinitcpio.conf

其中由兩點需要注意:

  • 由于分區的label和UUID都是 udev 分配的,因此 resume 必須放在 udev 之后
  • 由于 systemd hook 已經有了 resume 的功能,因此若已經有了 systemd hook,則無需再添加 udev hook

(2) 重新生成initramfs

sudo mkinitcpio -g /boot/initramfs-linux-lily.img==> Starting build: 4.16.12-2-lily -> Running build hook: [base] -> Running build hook: [udev] -> Running build hook: [autodetect] -> Running build hook: [modconf] -> Running build hook: [block] -> Running build hook: [filesystems] -> Running build hook: [keyboard] -> Running build hook: [fsck] -> Running build hook: [resume]==> Generating module dependencies==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-lily.img==> Image generation successful

(3) 重啟,讓配置生效

經過上面復雜的配置后,hibernation 休眠才能真正成功。與 suspend 休眠類似,我們也能使用 systemctl 來進行休眠

systemctl hibernate

類似的,它的實際動作由 systemd-hibernte.service 所定義, 在 archlinux 上,它長成這樣子的:

# SPDX-License-Identifier: LGPL-2.1+## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.[Unit]Description=HibernateDocumentation=man:systemd-suspend.service(8)DefaultDependencies=noRequires=sleep.targetAfter=sleep.target[Service]Type=oneshotExecStart=/usr/lib/systemd/systemd-sleep hibernate

hybrid 休眠

在配置好 hibernate 休眠后,也就能正常進行 hybrid 休眠了,方法是執行

systemctl hybrid-sleep

類似的,它的實際動作由 systemd-hybrid-sleep.service 所定義, 在 archlinux 上,它長成這樣子的:

# SPDX-License-Identifier: LGPL-2.1+## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.[Unit]Description=Hybrid Suspend+HibernateDocumentation=man:systemd-suspend.service(8)DefaultDependencies=noRequires=sleep.targetAfter=sleep.target[Service]Type=oneshotExecStart=/usr/lib/systemd/systemd-sleep hybrid-sleep

Sleep Hooks

從上面的service文件中可以看出,不管是哪種類型的系統休眠,其內部實際調用的都是 systemd-sleep.

man systemd-sleep

SYSTEMD-SUSPEND.SERVICE(8) systemd-suspend.service SYSTEMD-SUSPEND.SERVICE(8)NAME  systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-  sleep.service, systemd-sleep - System sleep state logicSYNOPSIS  systemd-suspend.service  systemd-hibernate.service  systemd-hybrid-sleep.service  /usr/lib/systemd/system-sleepDESCRIPTION  systemd-suspend.service is a system service that is pulled in by  suspend.target and is responsible for the actual system suspend.  Similarly, systemd-hibernate.service is pulled in by hibernate.target  to execute the actual hibernation. Finally,  systemd-hybrid-sleep.service is pulled in by hybrid-sleep.target to  execute hybrid hibernation with system suspend.  Immediately before entering system suspend and/or hibernation  systemd-suspend.service (and the other mentioned units, respectively)  will run all executables in /usr/lib/systemd/system-sleep/ and pass two  arguments to them. The first argument will be "pre", the second either  "suspend", "hibernate", or "hybrid-sleep" depending on the chosen  action. Immediately after leaving system suspend and/or hibernation the  same executables are run, but the first argument is now "post". All  executables in this directory are executed in parallel, and execution  of the action is not continued until all executables have finished.  Note that scripts or binaries dropped in /usr/lib/systemd/system-sleep/  are intended for local use only and should be considered hacks. If  applications want to react to system suspend/hibernation and resume,  they should rather use the Inhibitor interface[1].  Note that systemd-suspend.service, systemd-hibernate.service, and  systemd-hybrid-sleep.service should never be executed directly.  Instead, trigger system sleep states with a command such as "systemctl  suspend" or similar.  Internally, this service will echo a string like "mem" into  /sys/power/state, to trigger the actual system suspend. What exactly is  written where can be configured in the "[Sleep]" section of  /etc/systemd/sleep.conf or a sleep.conf.d file. See systemd-  sleep.conf(5).OPTIONS  systemd-sleep understands the following commands:  -h, --help   Print a short help text and exit.  --version   Print a short version string and exit.  suspend, hibernate, hybrid-sleep   Suspend, hibernate, or put the system to hybrid sleep.SEE ALSO  systemd-sleep.conf(5), systemd(1), systemctl(1), systemd.special(7),  systemd-halt.service(8)NOTES  1. Inhibitor interface

https://www.freedesktop.org/wiki/Software/systemd/inhibit

systemd 238                                         SYSTEMD-SUSPEND.SERVICE(8)
根據 systemd-sleep 的manual pages,可以看到在系統休眠之前以及從休眠狀態恢復之后,都會并行地調用 /usr/lib/systemd/system-sleep 中的腳本,并傳遞兩個參數。

第一個參數用來指定是開始休眠還是從休眠狀態恢復,分別對應的字符串 “pre” 與 “post”.

第二個參數用來指明休眠的類型,分別為字符串 “suspend”, “hibernate” 以及 “hybrid-sleep”

定時執行休眠

systemd 系統中的定時任務是由timer來實現的,而每個timer都與一個service相對應。

一般情況下,timer的名稱與service一致,但必要時可以通過在.timer文件中的 [Timer] 部分指定 Unit= 選項來控制一個與timer不同名的service。

下面是一個timer的例子,每天21:30分開始自動hibernate休眠

[Unit]Description=Hibernate every 21:30:00[Timer]OnCalendar=*-*-* 21:30:00Persistent=trueUnit=systemd-hibernate.service[Install]WantedBy=timers.target

定時喚醒休眠的linux

使用 rtcwake 可以在給定的時間喚醒處于休眠狀態的電腦

其主要用法為:

sudo rtcwake -m ${mode} -t ${time_t}# 或者sudo rtcwake -m ${mode} -s ${seconds}

其中,參數mode為待機模式,有以下幾個選項:

standby

普通待機模式,為默認選項,對應 ACPI state S1

mem

suspend休眠,對應 ACPI state S3

disk

hibernation 休眠,對應 ACPI state S4

off

通過調用系統的關機命令來休眠,對應 ACPI state S5

參數 time_t 為從 1970-01-01, 00:00 UTC 開始到現在的秒數,可以通過 date 命令來將時間字符串轉換成這個秒數,比如

sudo rtcwake -m disk -t $(date -d 08:30 +%s)

就是進行 hibernation 休眠,并于08:30分喚醒

參數 seconds 為秒數,表示從現在開始的多少秒后,系統喚醒。

總結

以上所述是小編給大家介紹的linux 定時休眠的實現思路,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合国产精品台湾中文娱乐网| 欧美一级淫片播放口| 欧美激情日韩图片| 日韩中文有码在线视频| 亚洲精品福利资源站| 国产精品爽爽ⅴa在线观看| 国产精品v日韩精品| 欧美一级在线亚洲天堂| 亚洲毛片在线观看| 亚洲欧美一区二区三区在线| 国外视频精品毛片| 98精品国产自产在线观看| 亚洲第一网站免费视频| 亚洲最大福利视频网| 色综合久久久久久中文网| 欧美一区第一页| 日韩在线欧美在线国产在线| 久久中文字幕国产| 97国产精品免费视频| 国产成人亚洲综合91精品| 中文字幕久久亚洲| 久久人人爽亚洲精品天堂| 国产精品成人免费视频| 日韩视频免费观看| 久久精品国产成人精品| 久久久久久美女| 91精品国产综合久久男男| 在线成人激情视频| 久久精品国产成人| 国产精品高清在线| 日韩av电影在线播放| 欧美伊久线香蕉线新在线| 午夜精品免费视频| 亚洲最大福利视频网| 国产精品一区专区欧美日韩| 亚洲国产欧美一区二区丝袜黑人| 久久久国产精品亚洲一区| 国产免费观看久久黄| 亚洲精品动漫久久久久| 精品国偷自产在线视频| 国产精品久久久久久久9999| 亚洲国产精品字幕| 91亚洲国产成人久久精品网站| 国产日韩中文字幕| 欧美激情一二区| 国产亚洲精品久久久久久| 国产一区二区三区视频在线观看| 亚洲国产日韩欧美综合久久| 国产精品91久久久| 久久成年人免费电影| 欧美电影在线免费观看网站| 亚洲在线视频福利| 成人乱色短篇合集| 国产成人综合亚洲| 国产日韩欧美中文在线播放| 国产亚洲欧洲高清| 免费91在线视频| 亚洲第一福利视频| 久久全国免费视频| 国产一区二区三区在线看| 最近2019年好看中文字幕视频| 国产区精品在线观看| 欧美激情视频三区| 国产视频亚洲精品| 精品亚洲一区二区三区四区五区| 国产激情久久久久| 国产精品久久久久久久久男| 亚洲视频在线播放| 亚洲人成网站在线播| 日韩中文字幕免费视频| 韩剧1988免费观看全集| 夜色77av精品影院| 欧美极品少妇全裸体| 欧美一区二区三区四区在线| 青青a在线精品免费观看| 国产欧美精品xxxx另类| 精品一区二区三区四区在线| 亚洲免费电影一区| 久久夜色精品国产亚洲aⅴ| 久久天天躁狠狠躁夜夜爽蜜月| 永久免费精品影视网站| 日韩成人网免费视频| 亚洲综合精品一区二区| 国产91色在线|| 久久久电影免费观看完整版| 日韩电视剧在线观看免费网站| 亚洲国产精久久久久久| 伊人久久久久久久久久| 精品久久久久久久久中文字幕| 国产有码一区二区| 国产经典一区二区| 亚洲第一页在线| 久久视频在线观看免费| 51ⅴ精品国产91久久久久久| 91国偷自产一区二区三区的观看方式| 青青草一区二区| 欧美亚洲另类激情另类| 亚洲精品第一国产综合精品| 91中文精品字幕在线视频| 日韩有码在线播放| 欧美激情性做爰免费视频| 日本精品视频在线观看| 欧美亚洲第一区| 北条麻妃久久精品| 欧美xxxx综合视频| 97在线视频免费播放| 蜜臀久久99精品久久久久久宅男| 国产亚洲欧洲高清| 色综合久综合久久综合久鬼88| 亚州成人av在线| 最近免费中文字幕视频2019| 中文字幕精品影院| 久久精品色欧美aⅴ一区二区| 2019国产精品自在线拍国产不卡| 亚洲有声小说3d| 精品视频久久久久久久| 7m第一福利500精品视频| 欧美日韩中文字幕在线| 久久精品国产综合| 欧美激情视频一区二区三区不卡| 亚洲裸体xxxx| 最好看的2019年中文视频| 精品亚洲一区二区| 欧美日韩国产成人在线| 国产成人亚洲精品| 欧美日韩国产精品一区二区不卡中文| 日韩在线视频观看| 亚洲美女av在线播放| 国产精品第一页在线| 97在线日本国产| 国产精品久久久久久久久久免费| 57pao成人国产永久免费| 久久精品视频在线播放| 亚洲成人av资源网| 黑人极品videos精品欧美裸| 欧美精品在线播放| 欧美激情在线狂野欧美精品| 欧美美女操人视频| 午夜精品福利在线观看| 久久久久久久久久国产| 97超碰蝌蚪网人人做人人爽| 萌白酱国产一区二区| 国产xxx69麻豆国语对白| 亚洲xxxx妇黄裸体| 久久久久久久久爱| 欧美在线观看一区二区三区| 搡老女人一区二区三区视频tv| 日韩在线国产精品| 97人洗澡人人免费公开视频碰碰碰| 日韩天堂在线视频| 久久综合伊人77777| 奇米一区二区三区四区久久| 国产精品亚洲美女av网站| 国产精品免费一区豆花| 国产日韩欧美日韩大片| 亚洲va男人天堂| 7777精品视频| 欧美精品videosex极品1| 亚洲欧美国产日韩天堂区| 亚洲成人精品视频在线观看| 色综合久久中文字幕综合网小说| 亚洲成人三级在线| 国产精品视频免费在线观看| 亚洲激情在线观看视频免费|