리눅스 컴퓨터를 정해진 시간에 잠들고 깨어나도록 하려면?
rtcwake 명령과 cron을 사용해 구현할 수 있다.
rtcwake
rtcwake는 sleep 후 real time clock을 사용해서 지정한 시간에 wake 하는 유틸리티로, 리눅스 기본 설치되어있다.
# rtcwake --help
Usage:
rtcwake [options]
Enter a system sleep state until a specified wakeup time.
Options:
-a, --auto reads the clock mode from adjust file (default)
-A, --adjfile <file> specifies the path to the adjust file
the default is /etc/adjtime
--date <timestamp> date time of timestamp to wake
-d, --device <device> select rtc device (rtc0|rtc1|...)
-n, --dry-run does everything, but suspend
-l, --local RTC uses local timezone
--list-modes list available modes
-m, --mode <mode> standby|mem|... sleep mode
-s, --seconds <seconds> seconds to sleep
-t, --time <time_t> time to wake
-u, --utc RTC uses UTC
-v, --verbose verbose messages
-h, --help display this help
-V, --version display version
For more details see rtcwake(8).sleep mode
잠자기 모드는 -m 옵션으로 지정하고, 값은 아래와 같음
standby: (디폴트) ACPI state S1로, 절전은 제한적이지만 시스템 복귀 시간이 빠름mem: 메모리(일반적인 절전. ACPI state S3 (Suspend-to-RAM)freeze: ACPI state S3. 시스템이 idle 상태에 진입하지만mem보다 절전이 적음.disk: 디스크(최대절전모드). ACPI state S4 (Suspend-to-disk)off: 전원 끔. ACPI state S5 (Poweroff)no: 잠들지 않음. 깨어나기만 실행. 다른 방법으로 잠자기에 들어가는 경우 사용.show: 지정된 깨어나기 시간 표시disable: 이전에 지정한 깨어나기 비활성화
깨어날 시간 지정
-s: 잠 잘 초 지정-l: (필수) timestamp, date string을 로컬 시간으로 해석. 이 플래그 빠지면 UTC 기준임에 주의.-t: 깨어날 epoch timestamp 지정--date: 깨어날 날짜를 date string으로 지정
—date 데이트 스트링 포맷
| 포맷 | 노트 |
|---|---|
| YYYYMMDDhhmmss | |
| YYYY-MM-DD hh:mm:ss | |
| YYYY-MM-DD hh:mm | 초는 00 |
| YYYY-MM-DD | 시간은 00:00:00 |
| hh:mm:ss | 날짜는 오늘 |
| hh:mm | 날짜는 오늘, 초는 00 |
| tomorrow | 시간은 00:00:00 |
| +5min |
시간 지정 예
# 10초 후 깨어남
sudo rtcwake -m mem -s 10
# 지정한 timestamp에 깨어남
sudo rtcwake -m mem -l -t $(date +\%s -d "tomorrow 09:00")
# +24-11시간(13시간) 후 깨어남
sudo rtcwake -m mem -l --date "$(date -d "+24 hours -11 hours" +"%F %T")"
# 내일 9:00 깨어남
sudo rtcwake -m mem -l --date "$(date -d "tomorrow 9:00" +"%F %T")"
# 다음 월요일 8:00 깨어남
sudo rtcwake -m mem -l --date "$(date -d "monday 8:00" +"%F %T")"cron 셋업 예
sudo crontab -e예제
# 평일 (월-목) 저녁 8시에 절전 모드로 들어가고 다음 날 아침 9시에 깨어남
0 20 * * 1-4 /usr/sbin/rtcwake -m mem -l --date "$(date -d "tomorrow 09:00" +"%F %T")"
# 금요일 저녁 8시에 절전 모드로 들어가고 토요일 아침 8시에 깨어남
0 20 * * 5 /usr/sbin/rtcwake -m mem -l --date "$(date -d "tomorrow 08:00" +"%F %T")"
# 토요일 저녁 6시에 절전 모드로 들어가고 월요일 아침 9시에 깨어남
0 18 * * 6 /usr/sbin/rtcwake -m mem -l --date "$(date -d "monday 09:00" +"%F %T")"