리눅스 컴퓨터를 정해진 시간에 잠들고 깨어나도록 하려면?
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")"