유닉스 : 지정된 시간까지 수면


12

명령 행에 지정된 시간까지 휴면 상태가되는 (반) 표준 Unix 명령이 있습니까? 다시 말해, 나는 sleep지속 시간보다 깨우는 시간이 걸리는 것과 비슷한 것을 찾고있다 .

예를 들면 다음과 같습니다. sleeptill 05:00:00

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

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

편집 내가하는 일의 특성으로 인해 "T에서 명령 실행"솔루션 대신 "T까지 잠자기"를 찾고 있습니다.

편집 나는 18:00의 명령을 실행하고 17:00 일어나 그것을 말한다면 의심의 소지를 없애기 위해는, 내가, 일광 절약 시간으로 할 필요 일부 코너의 경우 23 시간 동안 잠을 기대 (또는 22 시간 또는 24 시간 동안.)


당신은 사용할 수 있다고 cron생각합니다.
Bobby

고마워하지만 의도 된 용도로는 실제로 비슷해야합니다 sleep.
NPE

답변:


18

알맞은 날짜 명령이 있고 bash를 사용하는 Unix를 사용하는 경우 시간 계산에 % s 형식을 사용할 수 있습니다.

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))

(1700은 오후 5시이며 -j는 날짜를 실제로 설정하지 말라고 알려줍니다)


제안에 대한 (+1). 18:00에 명령을 실행하고 17:00에 깨우도록 명령하면 23 시간 동안 (또는 일부 경우에는 일광 절약 시간과 관련하여 22 또는 24 시간 동안) 잠이들 것으로 예상됩니다. 이것은 불행히도 제안이 무너지는 곳입니다. [또한 Linux 시스템에서 실행되도록 변경해야 -j했습니다 -d.]
NPE

7
@aix : Linux (및 GNU 날짜가있는 다른 시스템)에서는와 같은 정교한 날짜 사양을 사용할 수 있습니다 date -d 'tomorrow 17:00'.
Gilles 'SO- 악의를 멈춰라'

3
@NPE, BTW, 하나는 알림 분할을 사용하여 보정 할 수 있습니다 echo $(( ($(date -d "3:00" +%s) - $(date +%s) + (60*60*24)) % (60*60*24) ))(일부 DST-변경 주위에 문제가있을 수 있습니다)
HVR

13

이것은 어떻습니까 (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

9

linux / unix at명령을 확인하십시오 . 5AM 예제 사용 :

at 05:00 some_command

또한 시간대를 지원합니다.

GMT, UCT 또는 ZULU (대소 문자 구분)의 시간대 이름은 시간이 협정 세계시로 지정되도록 따를 수 있습니다. 다른 시간대는 TZ 환경 변수를 사용하여 지정할 수 있습니다.


제안에 대한 (+1). 불행히도 내 워크 플로에 자연스럽게 맞지 않습니다. 순서대로 많은 것을 실행하는 스크립트가 있으며 특정 단계가 특정 시간까지 시작되지 않도록하고 싶습니다. 물론이 캔은 사용 무언가로 변환 cron하거나 at,하지만 관리 할 수있는 고통 일 것이다. 이것이 내가 뭔가를 찾고있는 이유 sleep입니다. 지금은 내가 직접 작성했습니다.
NPE

아, 그래서 당신은 차단 일정을 원합니다. 프로세스의 각 단계를 추적하는 상태 파일이없는 이유는 무엇입니까?
Jeremy L

할 수는 있지만 필요한 것보다 다소 복잡하게 들립니다. 단계는 별도의 명령이며 셸 스크립트는 워크 플로를 조정합니다. 스크립트에서 "오후 5 시까 지 자"는 것이 정말 필요한 전부입니다.
NPE

이 경우 w00t의 대답은 정확하게 당신이 추구하는 것일 수 있습니다.
Jeremy L

그렇습니다. 그것은 올바른 정신에 있습니다. 슬프게도, 그것은 (나에게) 중요한 경우에 고장이 나고 시간대를하지 않습니다.
NPE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.