使用rtcwake定时唤醒linux
最近下载一批资料,但是由于网络不太好,下载的速度太慢,只有凌晨的时候下载速度会快一点,因此就想写一个定时任务在凌晨三点自动开始下载。
但是另一方面我也不希望电脑一直开着,这样太浪费电了...
经过一番搜索,最终让我发现了这一工具: rtcwake
测试本机是否支持定时唤醒
我们都知道,让linux定时关机或者定时休眠是一件很简单的事情,只需要通过 at
或 cron
设置好定时执行关机或休眠程序即可,基本上任何电脑都能够做到这一点。
但是如果想反过来,想在指定的时间让电脑自动启动就需要硬件和驱动的支持了。
我们可以通过下面命令来测试一下计算机是不是支持定时唤醒:
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
设置定时唤醒时间
有三种格式来设置定时唤醒时间:
- 使用
--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分钟后
- 使用
-s N
指定N
秒后唤醒 - 使用
-t N
, 其中N
为1970-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
命令判断。