Câu trả lời:
Lệnh mà bạn quan tâm là rtcwake
:
Chương trình này được sử dụng để vào trạng thái ngủ hệ thống cho đến khi thời gian thức dậy được chỉ định.
Để tìm đúng cú pháp phù hợp với bạn, hãy thử như sau:
sudo rtcwake -u -s 60 -m mem
Điều này sẽ đình chỉ máy tính trong 60 giây trước khi khôi phục. Tham số quan trọng là mem
Bạn có một số tùy chọn bạn có thể chọn - chơi để tìm giá trị phù hợp nhất với bạn:
standby
ACPI state S1. This state offers minimal, though real,
power savings, while providing a very low-latency transi‐
tion back to a working system. This is the default mode.
mem ACPI state S3 (Suspend-to-RAM). This state offers signif‐
icant power savings as everything in the system is put
into a low-power state, except for memory, which is
placed in self-refresh mode to retain its contents.
disk ACPI state S4 (Suspend-to-disk). This state offers the
greatest power savings, and can be used even in the
absence of low-level platform support for power manage‐
ment. This state operates similarly to Suspend-to-RAM,
but includes a final step of writing memory contents to
disk.
off ACPI state S5 (Poweroff). This is done by calling
'/sbin/shutdown'. Not officially supported by ACPI, but
usually working.
no Don't suspend. The rtcwake command sets RTC wakeup time
only.
on Don't suspend, but read RTC device until alarm time
appears. This mode is useful for debugging.
Một tập lệnh (ở dưới cùng của bài đăng này) có thể được sử dụng để tạm dừng máy tính của bạn và đánh thức vào một thời điểm cụ thể:
cú pháp là suspend_until [hh:mm]
ví dụ
sudo ./suspend_until 07:30
Lưu tập lệnh như tên suspend_until
và cung cấp cho nó quyền thực thi, tức là
chmod +x suspend_until
Bạn có thể tạo một công việc cron gốc gọi kịch bản này để thực thi vào một thời điểm cụ thể vào buổi tối và sau đó thức dậy vào buổi sáng:
sudo crontab -e
Bây giờ hãy nhập nội dung nào đó để chạy tập lệnh tạm dừng lúc 23:30:
30 23 * * * /home/myhomefolder/suspend_until 07:30
#!/bin/bash
# Auto suspend and wake-up script
#
# Puts the computer on standby and automatically wakes it up at specified time
#
# Written by Romke van der Meulen <redge.online@gmail.com>
# Minor mods fossfreedom for AskUbuntu
#
# Takes a 24hour time HH:MM as its argument
# Example:
# suspend_until 9:30
# suspend_until 18:45
# ------------------------------------------------------
# Argument check
if [ $# -lt 1 ]; then
echo "Usage: suspend_until HH:MM"
exit
fi
# Check whether specified time today or tomorrow
DESIRED=$((`date +%s -d "$1"`))
NOW=$((`date +%s`))
if [ $DESIRED -lt $NOW ]; then
DESIRED=$((`date +%s -d "$1"` + 24*60*60))
fi
# Kill rtcwake if already running
sudo killall rtcwake
# Set RTC wakeup time
# N.B. change "mem" for the suspend option
# find this by "man rtcwake"
sudo rtcwake -l -m mem -t $DESIRED &
# feedback
echo "Suspending..."
# give rtcwake some time to make its stuff
sleep 2
# then suspend
# N.B. dont usually require this bit
#sudo pm-suspend
# Any commands you want to launch after wakeup can be placed here
# Remember: sudo may have expired by now
# Wake up with monitor enabled N.B. change "on" for "off" if
# you want the monitor to be disabled on wake
xset dpms force on
# and a fresh console
clear
echo "Good morning!"
Lưu ý
Thay đổi mem
trong phần này của tập lệnh cho bất kỳ phương thức tạm ngưng nào phù hợp với bạn:
# Set RTC wakeup time
sudo rtcwake -l -m mem -t $DESIRED &
Bạn cũng có thể phải thay thế -u
cờ thay cho -l
cờ tùy thuộc vào việc đồng hồ phần cứng của bạn sử dụng thời gian UTC ( -u
) hay cục bộ ( -l
). Lưu ý rằng đồng hồ phần cứng của bạn khác với đồng hồ hệ thống bạn thấy trong hệ điều hành.
tín dụng để tái phân phối
Sử dụng rtcwake tôi đã tạo ra một tập lệnh bash đơn giản. Nó sử dụng php để dịch ngôn ngữ tự nhiên vào thời gian hệ thống. Ví dụ:
sudo ./cu "tomorrow 9am"
sudo ./cu "next monday 3pm"
sudo ./cu "1 hour ago"
rtcwake: time doesn't go backward
#!/bin/bash
export sdate=$1
date=`/usr/bin/php << 'EOF'
<?php
date_default_timezone_set("Etc/GMT-2");
$date = strtotime(GETENV("sdate"));
echo "\r".$date;
EOF`
rtcwake -m mem -t $date
rtcwake
không có tác dụng với máy của tôi. Trên bo mạch chủ Asus của tôi, tôi phải đặt thời gian đánh thức trong bios. Tôi đã tìm thấy cài đặt trong menu Advanced> APM và tôi đã phải sử dụng UTC mặc dù thời gian bios của tôi được đặt thành giờ miền Đông Hoa Kỳ.