无法协调系统和 rtcwake 之间的正确时间

无法协调系统和 rtcwake 之间的正确时间

最终目标是让我的系统在脚本结束时关闭,并在第二天的指定时间唤醒。我用它rtcwake来完成这个任务,就像这样(我还将日期和时间打印到输出中,以便进行比较)

/bin/date
/usr/sbin/rtcwake -m off -l -t $(date -d "21:00 today" +"%s") -n

其输出是

Mon Sep 18 20:59:12 EDT 2017
rtcwake: wakeup from "off" using /dev/rtc0 at Mon Sep 18 17:00:00 2017

因此,尽管返回的日期和时间/bin/date是正确的,并且我(认为我)将唤醒时间设置为 21:00,rtcwake但将时间解释为 4 小时前的 17:00。 (我意识到我在这里将其设置为同一天唤醒。我想让它工作,然后将其更改为第二天唤醒。)

为了解决问题,我稍微修改了脚本,删除了定义的时间,改为读取

/bin/date
/usr/sbin/rtcwake -m off -l -t $(date +"%s") -n

输出结果为

Mon Sep 18 21:14:46 EDT 2017
rtcwake: wakeup from "off" using /dev/rtc0 at Mon Sep 18 17:14:46 2017

这又比实际时间早了 4 个小时。这让我觉得date时间不对。但是当我修改脚本-lrtcwake命令中删除该选项时

/bin/date
/usr/sbin/rtcwake -m off -t $(date +"%s") -n

输出是

Mon Sep 18 21:18:04 EDT 2017
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "off" using /dev/rtc0 at Tue Sep 19 01:18:04 2017 

比当前时间晚了 4 个小时。这 4 个小时的差异对我来说毫无意义,因为我现在处于 EDT(纽约),而 UTC 有 5 个小时的差异。

我又尝试了一下并得到了以下信息:

1.

/bin/date
/usr/sbin/rtcwake -m off -t $(date +"%s" -d "tomorrow 10:00") -n

Mon Sep 18 21:19:11 EDT 2017
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "off" using /dev/rtc0 at Tue Sep 19 14:00:00 2017

2.

/bin/date
/usr/sbin/rtcwake -m off --date tomorrow 10:00 -n

Mon Sep 18 21:20:55 EDT 2017
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "off" using /dev/rtc0 at Tue Sep 19 04:00:00 2017

3

/bin/date
/usr/sbin/rtcwake -m off -l --date tomorrow 10:00 -n

Mon Sep 18 21:21:16 EDT 2017
rtcwake: wakeup from "off" using /dev/rtc0 at Mon Sep 18 20:00:00 2017

总结:我认为它rtcwake实际上并不知道现在几点,尽管我不确定我是否正确输入了起床日期和时间。我无数次打开rtcwakedate手册,但我没有看到我的问题。提前谢谢!

答案1

我已经亲自测试过了。

为了测试,我只是执行了“sudo rtcwake -m disk -s 60”,它只是使其休眠并在 1 分钟后唤醒它。

这里要注意的是,如果没有指定,rctwake 使用 UTC 而不是您的当地时间。

因此现在您需要将您的时钟与当前时间同步,然后根据差异使用 sudo 模式更改您的“etc/adjtime”并根据差异进行更改。

就我而言,我使用 IST,即 +5:30,即提前 5 小时 30 分钟,因此我在 adjtime 文件中写入了“5:30”。

现在,如果我使用“sudo rtcwake --local -m disk -s 60”命令,它会显示我的 IST 时间而不是之前的 UTC 时间。

因此从现在开始您也需要添加手册页中提到的“--local”或“-l”选项。

例如:“sudo rtcwake --local -m no -l -t $(date +%s -d 'tomorrow 09:30')”

将在第二天上午 9:30(按照您当地时间)从 /dev/rtc0 唤醒您的系统。之后,您可以设置一个 cron 来自动进行设置。

资料来源:rtcwake 手册页来自 how to geek,更多配置

答案2

我遇到了类似的问题(rtcwake使用的时间与“本地”时间不同),但在阅读了命令timedatectl这里我最终意识到我的时区不正确。

我使用此命令设置时区:

timedatectl set-timezone MYTIMEZONE

此后,rtcwake即使使用默认设置(无需我指定),也会使用正确的时间--local

相关内容