![如果时间已过,rtcwake 仅使用明天](https://linux22.com/image/917413/%E5%A6%82%E6%9E%9C%E6%97%B6%E9%97%B4%E5%B7%B2%E8%BF%87%EF%BC%8Crtcwake%20%E4%BB%85%E4%BD%BF%E7%94%A8%E6%98%8E%E5%A4%A9.png)
我的服务器闲置 30 分钟后就会进入睡眠状态。我需要每天凌晨 3 点唤醒我的服务器。到目前为止,我使用以下 cron 条目:
@reboot /usr/sbin/rtcwake -m no -u -t $(date +\%s -d `tomorrow 03:00`)
总体来说运行良好,但有一个例外。如果服务器在 00:00 到 03:00 之间启动(如果由客户端使用或激活),则唤醒时间设置为第二天,服务器在 03:00 之前处于空闲状态,并且不会启动 03:05 的计划作业。
如何使用 rtcwake 将唤醒时间设置为下一次 03:00,这意味着在一天的 00:00 到 03:00 之间,唤醒应设置为当天的 03:00,而在 03:00 之后,唤醒应设置为第二天的 03:00。
答案1
以下 crontab 条目应该可以执行您想要的操作:
@reboot /usr/sbin/rtcwake -m no -u -t $(date +\%s -d "$(date +\%D -d '3 hours ago') +1 day +3 hours")
首先,我们从当前日期时间中减去 3 小时并仅保留日期:
$(date +\%D -d '3 hours ago')
...结果将是今天(如果已经过了 3:00)或昨天 00:00:00。
增加 1 天 3 小时:
$(date +\%s -d "[...] +1 day +3 hours")
...因此结果是明天 3:00(如果已经过了 3:00)或今天 3:00。