유닉스: 지정된 시간까지 잠자기

유닉스: 지정된 시간까지 잠자기

명령줄에 지정된 시간까지 절전 모드로 전환되는 (반)표준 Unix 명령이 있습니까? 즉, sleep지속 시간이 아닌 깨우기 시간이 걸리는 것과 유사한 것을 찾고 있습니다.

예를 들어:sleeptill 05:00:00

나는 뭔가를 코딩할 수 있지만 이미 뭔가가 있다면 바퀴를 다시 발명하지 않을 것입니다.

보너스 질문: 시간대를 사용할 수 있다면 좋을 것입니다( 에서와 같이 sleeptill 05:00:00 America/New_York).

편집하다내가 하고 있는 일의 특성상 "T에서 명령 실행" 솔루션보다는 "T까지 절전 모드" 솔루션을 찾고 있습니다.

편집하다의심의 여지를 피하기 위해 18:00에 명령을 실행하고 17:00에 깨어나도록 지시하면 23시간 동안 잠자기 상태가 될 것으로 예상합니다(또는 일광 절약 시간제와 관련된 일부 특수한 경우에는 22시간 또는 24시간.)

답변1

적절한 날짜 명령이 있고 bash를 사용하는 Unix를 사용하고 있다면 %s시간 계산에 이 형식을 사용할 수 있습니다.

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
  • 1700오후 5시.
  • -j실제로 날짜를 설정하지 않도록 날짜를 알려줍니다.

답변2

이것은 어떻습니까(w00t와 Gille의 아이디어를 함수로 결합)?

function sleep_until {
  seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
  echo "Sleeping for $seconds seconds"
  sleep $seconds
}

용법:

sleep_until 8:24
Sleeping for 35 seconds

sleep_until '23:00'
Sleeping for 52489 seconds

sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds

답변3

리눅스/유닉스를 확인해보세요at명령. 오전 5시 예를 사용하면 다음과 같습니다.

at 05:00 some_command

시간대도 지원합니다.

GMT, UCT 또는 ZULU(대소문자 구분 안 함)의 시간대 이름을 사용하여 시간이 협정 세계시(Coordinated Universal Time)임을 지정할 수 있습니다. TZ 환경 변수를 사용하여 다른 시간대를 지정할 수 있습니다.

관련 정보