如果时间已过,rtcwake 仅使用明天

如果时间已过,rtcwake 仅使用明天

我的服务器闲置 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。

相关内容