转载自: http://blog.rythdev.com/2012/03/let-pc-wake-automatically-from-suspend-or-hibernation-in-given-time/
本人与同住的朋友共享宽带,于是每天下班后的晚上都是网络拥堵期。想下载点东西,又怕妨碍别人正常上网,而白天又没这个时间。我就想,能不能 让电脑在晚上或者白天自动开机下载呢?经过检查,发现我的电脑不支持定时开机,这条路堵了。那换个思路,能不能定时从待机或睡眠状态恢复呢?答案是肯定 的!就是本文的主角 rtcwake !
看名字就知道,rtcwake 是利用电脑主板上带的rtc来作为定时基准,在给定的时间唤醒处于待机或休眠状态的电脑。是不是很神奇?反正我觉得是。
好了,开始使用rtcwake,一开始以为先要安装,发现它已经是Linux的一个核心组件了,几乎所有发行版都自带的。可以直接在终端上输入
rtcwake
来看是否可用。
rtc的用法很简单,例如下面的语句
rtcwake -m disk -s 7200
表示时电脑进入休眠模式,并在2个小时(7200秒)后自动唤醒。
-m 参数表示使用的模式,常用的有下面几个
- standby
- 普通待机模式,为默认选项,对应 ACPI state S1
- mem
- 待机到内存,即除内存之外把其他设备都进入低功耗模式,对应 ACPI state S3
- disk
- 待机到硬盘,即休眠,把电脑的当前状态保存到硬盘,几乎不消耗外部电源,对应 ACPI state S4
- off
- 通过条用系统的关机命令来休眠,对应 ACPI state S5
-s 参数表示唤醒时刻距离想在的时间,以秒为单位,例如-s 7200 为在2小时后唤醒.
-t 参数表示在具体某个时间唤醒,接受与epoch(1970-01-01)之间的秒数,可用date命令来转换,例如
rtcwake -m disk -t `date -d 10:45 +%s`
表示在10:45这个时刻唤醒。
具体命令的用法可以参看rtcwake的manpage
下面是一个让电脑自动唤醒执行若干任务,然后再关机的脚本
#!/bin/bash
# 休眠2小时后自动唤醒
sudo /usr/sbin/rtcwake -m disk -s 7200
# 稍微一个延时,让网络稳定等等
sleep 5
# 关掉显示器
xset dpms force off
# 执行若干任务
job1
job2
# 关机
sudo /sbin/shutdown -P now
rtcwake 与 shutdown 都需要root权限,可以把它们加进visudo的列表,就可以在使用sudo时不用输入密码。 从此某人的电脑在深夜会突然亮起来,风扇与硬盘会狂转几个小时,然后又自动关机,重归寂静。