![Pmset 多个重复计划对](https://linux22.com/image/1356031/Pmset%20%E5%A4%9A%E4%B8%AA%E9%87%8D%E5%A4%8D%E8%AE%A1%E5%88%92%E5%AF%B9.png)
pmset bash 命令可以与多个重复动作对一起使用吗?
例如:
13:00 唤醒或开机,17:00 睡眠
和
18:00 唤醒,20:00 关机
如果没有,是否有开源工具可以实现此目的?是否有其他工具可以在特定时间打开计算机,或者这只能在 pmset 中实现?
编辑:我正在寻找一个可以在 bash 中的所有类 UNIX 系统上运行的工具。
答案1
您可以使用rtcwake
和shutdown
来做到这一点。
rtcwake
是一款用于暂停计算机并在一段时间后将其唤醒的实用程序。基本用法是
rtcwake -m <mode> -s <seconds>
例如
rtcwake -m mem -s 60
将使计算机挂起至内存并在 60 秒后唤醒。可以编写脚本按顺序调用所需的操作,例如:
#!/bin/sh
# calculate seconds remaining until $1
seconds_until() {
current_time=`date +%s`
target_time=`date -d $1 +%s`
seconds=`expr $target_time - $current_time`
# wrap seconds
[ $seconds -lt 0 ] && seconds=`perl -e "print $seconds+86400"`
echo $seconds
}
# suspend and wake up at 13:00
rtcwake -m mem -s `seconds_until 13:00`
# wait until 17:00, suspend, and wake up at 18:00
sleep `seconds_until 17:00`
rtcwake -m mem -s `seconds_until 18:00`
# wait until 20:00 and shutdown
sleep `seconds_until 20:00`
shutdown -h now
使用需要 root 权限rtcwake
。