最终目标是让我的系统在脚本结束时关闭,并在第二天的指定时间唤醒。我用它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
时间不对。但是当我修改脚本-l
从rtcwake
命令中删除该选项时
/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
实际上并不知道现在几点,尽管我不确定我是否正确输入了起床日期和时间。我无数次打开rtcwake
和date
手册,但我没有看到我的问题。提前谢谢!
答案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 来自动进行设置。
答案2
我遇到了类似的问题(rtcwake
使用的时间与“本地”时间不同),但在阅读了命令timedatectl
后这里我最终意识到我的时区不正确。
我使用此命令设置时区:
timedatectl set-timezone MYTIMEZONE
此后,rtcwake
即使使用默认设置(无需我指定),也会使用正确的时间--local
。