핵심 요약
- sleep 명령어 뒤에 시간을 붙여 사용합니다. s=초, m=분, h=시간, d=일 (예: sleep 5s는 스크립트를 5초간 일시 중지합니다)
- 자세한 내용은 man sleep 명령어로 확인할 수 있습니다.
이 글에서는 리눅스 sleep 명령어를 사용해 BASH 스크립트를 일시 중지하는 방법을 설명합니다. sleep 명령어는 단독으로 사용할 때는 크게 유용하지 않지만, 스크립트의 일부로 활용하면 다양한 방식으로 응용할 수 있습니다. 예를 들어, 처음에 실패한 명령을 재시도하기 전에 스크립트를 잠시 멈추는 용도로 사용할 수 있습니다.
sleep 명령어 활용 예시
다른 서버에서 다운로드한 파일을 처리하는 스크립트가 있다고 가정해 보겠습니다. 모든 파일의 다운로드가 완료되기 전까지는 복사 작업을 시작하면 안 됩니다. 다운로드는 별도의 스크립트가 먼저 실행되어 처리합니다.
파일을 복사하는 스크립트에는 모든 파일이 다운로드되었는지 확인하는 루프가 포함될 수 있습니다. 예를 들어 복사를 시작하기 전에 50개의 파일이 모두 존재하는지 검사하는 방식입니다.
스크립트가 조건을 끊임없이 검사하면 프로세서 시간을 낭비하게 되므로 비효율적입니다. 대신 각 검사 사이에 몇 분간 대기한 후 다시 시도하는 방식이 좋습니다. 이럴 때 sleep 명령어가 딱 맞습니다.
sleep 명령어 사용 방법
리눅스 sleep 명령어를 사용하려면 터미널 창에 다음을 입력합니다:
sleep 5s
위 명령어는 터미널이 5초간 대기한 후 명령줄로 돌아오게 합니다.
sleep 명령어는 sleep 키워드 뒤에 대기 시간을 나타내는 숫자와 시간 단위를 붙여 사용합니다.
지연 시간은 초, 분, 시간, 일 단위로 지정할 수 있습니다.
- s: 초
- m: 분
- h: 시간
- d: 일
스크립트를 며칠 동안 일시 중지해야 하는 경우에는, 스크립트를 며칠 동안 백그라운드에서 실행해 두기보다는 cron 작업을 사용해 일정한 간격으로 스크립트를 실행하는 것이 좋습니다.
cron 작업은 정해진 시간이나 요일에 실행하도록 예약할 수 있는 리눅스 명령어 또는 스크립트입니다. 장기간 반복 수행해야 하는 작업에 특히 유용합니다.
sleep 명령어의 시간 간격 숫자는 반드시 정수일 필요가 없습니다. 소수점 숫자도 사용할 수 있습니다.
예를 들어 다음 구문은 소수 단위의 초를 포함합니다:
sleep 3.5s
sleep 명령어 응용 예시: 카운트다운 시계
다음 스크립트는 sleep 명령어를 사용해 터미널 기반 카운트다운 시계를 만드는 방법을 보여줍니다:
#!/bin/bash
x=10
while [ $x -gt 0 ]
do
sleep 1s
clear
echo "$x seconds until blast off"
x=$(( $x - 1 ))
done
이 스크립트의 작동 방식은 다음과 같습니다:
- 스크립트는 변수 x를 10으로 설정합니다.
- while 루프는 x의 값이 0보다 큰 동안 계속 반복됩니다.
- sleep 명령어는 루프가 한 번 돌 때마다 스크립트를 1초간 일시 중지합니다.
- 루프의 나머지 부분은 매 반복마다 화면을 지우고, "x seconds until blast off" 메시지를 표시한 후 x 값에서 1을 뺍니다.
sleep 명령어가 없다면 스크립트가 순식간에 실행되어 메시지가 너무 빠르게 지나가 버립니다.
sleep 명령어 옵션 사용 방법
sleep 명령어에는 몇 가지 옵션만 있습니다.
--help 옵션은 sleep 명령어의 도움말 파일을 표시합니다. 다음과 같이 man 명령어를 사용해도 동일한 결과를 얻을 수 있습니다:
man sleep
--version 옵션은 시스템에 설치된 sleep 명령어의 버전을 표시합니다.
--version 옵션이 반환하는 정보는 다음과 같습니다:
- 버전 번호
- 저작권 정보
- 라이선스
- 작성자
sleep 명령어로 터미널 명령 일시 중지하기
sleep 명령어의 또 다른 유용한 활용법은 터미널 창에 입력하는 명령어 사이에 대기 시간을 넣는 것입니다.
원한다면 두 명령어를 연달아 입력하면서, 첫 번째 명령이 끝나기를 기다린 후 두 번째 명령어를 입력할 수 있습니다.
하지만 더 빠른 방법은 두 명령어를 한 줄에 입력하고 명령어 사이에 sleep 명령어를 넣는 것입니다:
$ cd /mydirectory/ && sleep 3 && ls
이 명령어의 작동 방식은 다음과 같습니다:
- cd /mydirectory/ 명령어가 디렉터리를 변경합니다.
- sleep 3 명령어가 cd 명령이 완료될 때까지 3초간 기다립니다.
- ls 명령어가 실행되어 디렉터리 내용을 표시합니다.
이처럼 간단한 예시에서는 sleep 명령어가 약간의 시간만 절약해 줍니다. 하지만 실행해야 할 명령어 목록이 길다면, 명령어를 한 줄에 입력할 수 있는 이 기능이 작업 시간을 크게 단축해 줍니다.