暗无天日

=============>DarkSun的个人博客

使用rtcwake定时唤醒linux

最近下载一批资料,但是由于网络不太好,下载的速度太慢,只有凌晨的时候下载速度会快一点,因此就想写一个定时任务在凌晨三点自动开始下载。 但是另一方面我也不希望电脑一直开着,这样太浪费电了... 经过一番搜索,最终让我发现了这一工具: rtcwake

测试本机是否支持定时唤醒

我们都知道,让linux定时关机或者定时休眠是一件很简单的事情,只需要通过 atcron 设置好定时执行关机或休眠程序即可,基本上任何电脑都能够做到这一点。 但是如果想反过来,想在指定的时间让电脑自动启动就需要硬件和驱动的支持了。

我们可以通过下面命令来测试一下计算机是不是支持定时唤醒:

sudo rtcwake -m standby -s 10

正常情况下该命令会休眠到内存,然后10秒后又被唤醒。

rtcwake使用方法

rtcwake其实包括两个动作,第一个动作是休眠或关机,第二个动作是定时唤醒。

设置关机/休眠模式

我们使用 -m mode 来设置rtcwake的关机/休眠模式,理论上 mode 的可选值包括:

standby
待机状态,节省的电源比较少,但是唤醒速度很快
freeze
所有进程被冻结,所有设备暂停运行,但系统依然在运行。该模式需要linux3.9以上的支持
mem
休眠到内存,除了内存以外的大部分机器部件都进入断电状态。 这种休眠状态恢复速度特别快,但由于内存中的数据并没有被保存下来,因此这个状态的系统并没有进入真正意义上的休眠状态,还在持续耗电。
disk
休眠到磁盘, 这种休眠状态恢复速度特别快,但由于内存中的数据并没有被保存下来,因此这个状态的系统并没有进入真正意义上的休眠状态,还在持续耗电。这种情况下系统可以完全断电,但由于要保存/读取系统状态到/从交换空间,因此速度会比较慢.
off
这就不是休眠了,而是直接关机
no
不进行休眠或关机,只设置唤醒时间
disable
取消上一次设置的定时唤醒
show
显示设置的定时唤醒信息

但事实上,本机可能不会支持所有的mode,我们可以通过 --list-modes 选项来查看本机支持的关机/休眠模式

rtcwake --list-modes
freeze mem disk off no on disable show 

设置定时唤醒时间

有三种格式来设置定时唤醒时间:

  1. 使用 --date 特定时间 来明确指定哪个特定时间唤醒,这个 特定时间 的格式可以是:
    YYYYMMDDhhmmss
    YYYY年MM月DD日hh时mm分ss秒
    YYYY-MM-DD hh:mm:ss
    YYYY年MM月DD日hh时mm分ss秒
    YYYY-MM-DD hh:mm
    YYYY年MM月DD日hh时mm分00秒
    YYYY-MM-DD
    YYYY年MM月DD日00时00分00秒
    hh:mm:ss
    今天的hh时mm分ss秒
    hh:mm
    今天的hh时mm分00秒
    tomorrow
    明天的00时00分00秒
    +5min
    5分钟后
  2. 使用 -s N 指定 N 秒后唤醒
  3. 使用 -t N, 其中 N1970-01-01 00:00 UTC 开始计数的秒钟数

关于硬件时钟的说明

rtcwake命令默认根据 /etc/adjtime(man adjtime_config) 中的第三行信息(UTC或LOCAL)来判断硬件时钟是按照UTC还是本地时间来设置的. 但是你可以通过 -u/--utc 来强制要求rtcwake命令将硬件时钟看成是UTC时间,或者通过 -l/--local 选项来将硬件时钟看成是本地时间。 甚至可以通过 -A/--adjfile file 来指定另一个 adjtime 文件供 rtcwake 命令判断。