사용하지 않고 명령을 지연시키는 대체, 대안 또는 bash 트릭이 sleep
있습니까? 예를 들어 실제로 sleep을 사용하지 않고 아래 명령을 수행합니다.
$ sleep 10 && echo "This is a test"
at
하나 일 것이라고 생각 하지만 사용 예제를 찾을 수 없습니다.
사용하지 않고 명령을 지연시키는 대체, 대안 또는 bash 트릭이 sleep
있습니까? 예를 들어 실제로 sleep을 사용하지 않고 아래 명령을 수행합니다.
$ sleep 10 && echo "This is a test"
at
하나 일 것이라고 생각 하지만 사용 예제를 찾을 수 없습니다.
답변:
당신은 대안이 sleep
그들이 : at
와 cron
. 이와 반대로 sleep
, 당신은 당신이 그들을 실행하는 데 필요한 시간을 제공해야합니다.
를 atd
실행 하여 서비스가 실행 중인지 확인하십시오 service atd status
.
이제 날짜가 UTC 오전 11:17이라고 가정하겠습니다. 11:25 UTC에 명령을 실행해야하는 경우 구문은 다음과 같습니다 echo "This is a test" | at 11:25
.
이제 atd
기본적으로 작업 완료를 기록하지 않습니다. 자세한 내용은이 링크를 참조하십시오 . 응용 프로그램에 자체 로깅이있는 것이 좋습니다.
옵션을 보거나 새 작업을 추가하려면 cron
다음 에서 작업을 예약 할 수 있습니다 . 작업 실행 정보를 확인할 수 있습니다.man cron
crontab -e
/var/log/cron
FYI sleep system call
는 현재 실행을 일시 중단하고 인수가 전달되도록 예약합니다.
편집하다:
@Gaius가 언급했듯이 at
명령 에 몇 분의 시간을 추가 할 수도 있지만 시간은 12:30:30
이제 스케줄러를 실행했습니다 now +1 minutes
. 60 초로 변환되는 1 분이 지정되었지만 at
실제로 12:31:30
작업을 실행할 때까지 기다리지 않고에서 작업을 실행합니다 12:31:00
. 시간 단위는입니다 minutes, hours, days, or weeks
. 자세한 내용은man at
예 : echo "ls" | at now +1 minutes
함께 bash
내장 명령을 수행 할 수 있습니다 :
coproc read -t 10 && wait "$!" || true
를 사용하지 않고 10 초 동안 잠자기 sleep
. 은 coproc
그래서 있는지 확인하는 것입니다 read
의 표준 입력 아무것도 이제까지에서 나올 것 파이프입니다. || true
때문에 wait
의 종료 상태는 경우 출구로 쉘을 일으킬 것 SIGALRM 배달을 반영합니다errexit
옵션이 설정됩니다.
다른 껍질에서 :
mksh
그리고 ksh93
한 sleep
내장, (그들은 모두 또한 지원하지만 다른 사람이 무엇을 사용하여 아무 문제 read -t
).
zsh
또한 지원 read -t
하지만 주위 select()
에 래퍼가 내장 되어 있으므로 다음을 사용할 수도 있습니다.
zmodload zsh/zselect
zselect -t 1000 # centiseconds
대화식 셸 세션에서 실행되도록 예약하려는 경우의 zsh/sched
모듈zsh
도 참조하십시오 .
read -t 10 < /dev/zero || true
?
read
select (2) 또는 이와 유사한 것을 사용하여 구현 될 것으로 기대합니다 (시간 초과 읽기 가이 질문에 대한 좋은 답변임을 암시합니다). 나는 당신을 모순하기보다는 놀람을 표현하고 있지만, 이것에 대해 더 논의 할 수 있습니까?
/dev/zero
는 무한한 양의 데이터 (NUL 바이트)를 포함하는 파일입니다. 따라서 read
10 초 동안 최대한 많이 읽습니다. 고맙게도 bash
변수에 NUL 바이트 저장을 지원하지 않는 경우 메모리를 사용하지 않지만 여전히 CPU 리소스를 사용합니다.
/dev/stdout
는 tty 장치이므로 백그라운드에서 실행되는 경우 스크립트 중지와 같은 부작용이 발생하고 사용자가 enter를 누르면 enter를 반환합니다. read -t 10 /dev/stdout | :
Linux에서는 작동하지만 Linux에서만 작동하지만 coproc
OS에 관계없이 작동해야합니다.
다른 아이디어들.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null
bash 내장 변수 $SECONDS
와 사용중 루프 사용하기 :
for((target=$((SECONDS + 10)); SECONDS < target; true)); do :; done
이 책에서 가장 오래된 트릭 :
read && echo "This is a test"
그냥 치면 Enter계속됩니다!
sleep
) 예제를 제공하고 없이 동일한 대안을 요청합니다. 그래서 read
미안, 구문 분석하지 않습니다. ;)
--- press «enter» to continue ---
;-)
BASIC을 실행하는 마이크로 컴퓨터 시대에 지연은 일반적으로 빈 루프로 이루어졌습니다.
FOR I = 1 TO 10000:NEXT
쉘 스크립트에 지연을 삽입하는 데 동일한 원칙을 사용할 수 있습니다.
COUNTER=0; while [ $COUNTER -lt 10000 ]; do :; let COUNTER=COUNTER+1; done
물론,이 접근 방식의 문제점은 지연 시간이 프로세서 속도에 따라 (또는 다른로드에서 동일한 머신에서) 머신마다 다를 수 있다는 것입니다. 와 달리 sleep
CPU (또는 코어 중 하나)를 최대로 사용합니다.
어떤이 내장되지-에, 같은 않는 sleep
(하지 않는 한sleep
내장된다). 그러나 기다릴 다른 명령이 있습니다.
몇 가지가 포함됩니다.
at
및 cron
: 특정 시간에 작업을 예약하는 데 사용됩니다.
inotifywait
: 파일 또는 파일 수정 / 제거 / 추가 / 기타를 기다리는 데 사용
at
있습니까?
cron
에 작업을 저장 crontab
하시겠습니까? at
예약 된 데이터 는 어디에 저장합니까?
윈도우와 배치의 땅에서 나온 고전 :
ping -c 11 localhost >/dev/null && echo "This is a test"
sleep
?