Конечной цели нужно было отключить мою систему в конце сценария и проснуться в определенное время на следующий день. Я использую 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
корректны, и я (думайте, что I), устанавливаю время пробуждения в течение 21:00, rtcwake
интерпретирует время как 17:00, 4 предшествующие часа. (Я понимаю, что устанавливаю его для пробуждения того же дня здесь. Я хочу получить его работа и затем изменить его для пробуждения на следующий день.)
Для поиска и устранения неисправностей я изменил сценарий немного, удалив определенное время, для чтения
/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
руководства бесчисленные времена, но я не вижу свою проблему.Заранее большое спасибо!
Я лично протестировал меня.
Для тестирования этого я просто сделал "sudo rtcwake-m диск-s 60", который просто был в спящем режиме он и разбудил его после 1 минуты
, Вещь здесь для замечания состоит в том, что rctwake использует UTC и не местное время если не указанный.
Поэтому теперь вместо этого необходимо синхронизировать часы с текущим временем, затем на основе изменения различия "etc/adjtime", использующий sudo режим и изменение согласно различию.
В моем случае я использую IST, который является +5:30 т.е. 5 часов 30 минутами вперед, таким образом, я записал "5:30" в adjtime файле.
Теперь, Если я использую "sudo rtcwake - локальный-m диск-s 60" управляет, чтобы он показал мое время IST вместо предыдущего раза UTC.
Поэтому с этого времени необходимо добавить "-локальная" или "-l" опция также, как упомянуто в странице справочника.
Пример: "sudo rtcwake - локальный-m никакой-l-t $ (дата + %s-d вЂtomorrow 09:30’)"
разбудил бы Вашу систему на следующий день в 9:30 согласно Вашему местному времени от/dev/rtc0. После этого можно настроить крон для установки этого автоматически.
Источники: rtcwake страница справочника , , от как фанату, еще некоторые конфигурации
У меня была подобная проблема (rtcwake
использовал другое время, чем "локальное" время), но после чтения о timedatectl
управляйте здесь, я в конечном счете понял, что мой часовой пояс был неправильным.
Я установил часовой пояс с этой командой:
timedatectl set-timezone MYTIMEZONE
После этого rtcwake
использует корректное время, даже с настройками по умолчанию (никакая потребность во мне для определения --local
.