Конечная цель - отключить мою систему в конце скрипта и просыпаться в определенное время на следующий день. Я использую 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 интерпретирует время как 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, но я не вижу своей проблемы. Большое спасибо заранее!
У меня была аналогичная проблема (rtcwake использовал другое время, чем «местное» время), но после прочтения команды timedatectl здесь я в конце концов понял, что мой часовой пояс неверен.
] Я установил часовой пояс с помощью этой команды:
timedatectl set-timezone MYTIMEZONE
После этого rtcwake использует правильное время даже с настройками по умолчанию (мне не нужно указывать --local.
Я лично проверил себя.
Чтобы проверить, что я просто сделал «sudo rtcwake -m disk -s 60», который просто впал в спячку и разбудил его после 1 мин.
Здесь нужно отметить, что rctwake использует UTC, а не ваше местное время, если не указано.
Теперь вместо этого вам нужно синхронизировать ваши часы с текущим временем, а затем на основе разница изменит ваше «etc / adjtime» с помощью режима sudo и изменится в зависимости от разницы.
В моем случае я использую IST, который равен +5: 30, т.е. 5 часов 30 минут вперед, поэтому я написал «5:30 "в файле adjtime.
Теперь, если я использую команду sudo rtcwake -local -m disk -s 60, она показывает мое время IST, а не предыдущее время UTC.
Итак, теперь вам нужно добавить параметр «--local» или «-l», как указано в man-странице.
Пример: «sudo rtcwake --local -m no -l -t $ (date +% s -d 'завтра 09:30') "
разбудит вашу систему на следующий день в 9:30 по местному времени из / dev / rtc0. После этого вы можете настроить cron, чтобы установить это автоматически.
Источники: справочная страница rtcwake, от того, как выкинуть, еще несколько конфигураций
У меня была аналогичная проблема (rtcwake использовал другое время, чем «местное» время), но после прочтения команды timedatectl здесь я в конце концов понял, что мой часовой пояс неверен.
] Я установил часовой пояс с помощью этой команды:
timedatectl set-timezone MYTIMEZONE
После этого rtcwake использует правильное время даже с настройками по умолчанию (мне не нужно указывать --local.
Я лично проверил себя.
Чтобы проверить, что я просто сделал «sudo rtcwake -m disk -s 60», который просто впал в спячку и разбудил его после 1 мин.
Здесь нужно отметить, что rctwake использует UTC, а не ваше местное время, если не указано.
Теперь вместо этого вам нужно синхронизировать часы с текущим временем, а затем на основе разница изменит ваше «etc / adjtime» с помощью режима sudo и изменится в зависимости от разницы.
В моем случае я использую IST, который равен +5: 30, т.е. 5 часов 30 минут вперед, поэтому я написал «5:30 "в файле adjtime.
Теперь, если я использую команду sudo rtcwake -local -m disk -s 60, она показывает мое время IST, а не предыдущее время UTC.
Итак, теперь вам нужно добавить параметр «--local» или «-l», как указано в man-странице.
Пример: «sudo rtcwake --local -m no -l -t $ (date +% s -d 'завтра 09:30') "
разбудит вашу систему на следующий день в 9:30 по местному времени из / dev / rtc0. После этого вы можете настроить cron, чтобы установить это автоматически.
Источники: справочная страница rtcwake, от того, как выкинуть, еще несколько конфигураций