사용하지 않고 명령을 지연시키는 대체, 대안 또는 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 croncrontab -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?
readselect (2) 또는 이와 유사한 것을 사용하여 구현 될 것으로 기대합니다 (시간 초과 읽기 가이 질문에 대한 좋은 답변임을 암시합니다). 나는 당신을 모순하기보다는 놀람을 표현하고 있지만, 이것에 대해 더 논의 할 수 있습니까?
/dev/zero는 무한한 양의 데이터 (NUL 바이트)를 포함하는 파일입니다. 따라서 read10 초 동안 최대한 많이 읽습니다. 고맙게도 bash변수에 NUL 바이트 저장을 지원하지 않는 경우 메모리를 사용하지 않지만 여전히 CPU 리소스를 사용합니다.
/dev/stdout는 tty 장치이므로 백그라운드에서 실행되는 경우 스크립트 중지와 같은 부작용이 발생하고 사용자가 enter를 누르면 enter를 반환합니다. read -t 10 /dev/stdout | :Linux에서는 작동하지만 Linux에서만 작동하지만 coprocOS에 관계없이 작동해야합니다.
다른 아이디어들.
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
물론,이 접근 방식의 문제점은 지연 시간이 프로세서 속도에 따라 (또는 다른로드에서 동일한 머신에서) 머신마다 다를 수 있다는 것입니다. 와 달리 sleepCPU (또는 코어 중 하나)를 최대로 사용합니다.
어떤이 내장되지-에, 같은 않는 sleep(하지 않는 한sleep 내장된다). 그러나 기다릴 다른 명령이 있습니다.
몇 가지가 포함됩니다.
at및 cron: 특정 시간에 작업을 예약하는 데 사용됩니다.
inotifywait: 파일 또는 파일 수정 / 제거 / 추가 / 기타를 기다리는 데 사용
at있습니까?
cron에 작업을 저장 crontab하시겠습니까? at예약 된 데이터 는 어디에 저장합니까?
윈도우와 배치의 땅에서 나온 고전 :
ping -c 11 localhost >/dev/null && echo "This is a test"
sleep?