Linux 절전 명령으로 Bash 스크립트를 일시 중지하는 방법

리눅스 환경에서 sleep 명령어는 시스템이 특정 시간 동안 아무 작업도 하지 않고 일시 정지 상태를 유지하도록 합니다. 이러한 기능이 직관적이지 않을 수 있지만, 때로는 의도적으로 시스템의 활동을 멈추어야 할 필요가 있습니다. 본 글에서는 Bash 셸에서 이 명령어를 효율적으로 사용하는 다양한 방법을 소개합니다.

sleep 명령어의 사용법은 매우 간단합니다. 명령줄에 sleep을 입력한 후 공백으로 구분하여 숫자를 입력하고 Enter 키를 누르면 됩니다.

예를 들어 다음과 같이 입력하면:

sleep 5

커서는 5초 동안 사라졌다가 다시 나타납니다. 이 명령은 Bash에게 지정된 시간(이 예에서는 5초) 동안 프로세스 실행을 중단하도록 지시합니다. sleep 명령어는 이러한 방식으로 시스템의 활동을 일시적으로 멈추는 데 활용될 수 있습니다.

sleep 명령어는 일, 시간, 분, 초 단위로 시간을 설정할 수 있습니다. 이를 위해 숫자 뒤에 d(일), h(시간), m(분), s(초) 접미사를 사용합니다. 예를 들어, 1일 4시간 7분 5초 동안 시스템을 일시 정지하려면 다음과 같이 명령어를 입력합니다:

sleep 1d 4h 7m 5s

s(초) 접미사는 선택 사항입니다. 접미사가 생략되면 sleep은 모든 숫자를 초 단위로 간주합니다. 만약 5분 20초 동안 시스템을 일시 중지하고 싶다면, 올바른 명령어는 다음과 같습니다:

sleep 5m 20

만약 분 단위에 m 접미사를 빠뜨린다면, sleep 명령어는 먼저 5초 동안 일시 중지한 다음 20초 동안 다시 일시 중지합니다. 따라서 총 25초 동안 멈추게 됩니다. sleep 명령어는 매개변수 순서에 크게 구애받지 않습니다. 어떤 순서로 입력하든 상관없이 명령을 올바르게 이해합니다. 부동 소수점 숫자도 매개변수로 사용할 수 있습니다. 예를 들어, 0.5h는 30분 동안 일시 중지하라는 의미로 해석됩니다.

다음은 모두 sleep에게 10초 동안 일시 중지하도록 지시하는 다양한 (때로는 기이한) 명령 예시입니다:

sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m

명령 실행 전 일시 정지

sleep 명령을 사용하여 특정 명령을 실행하기 전에 시스템을 일시 정지할 수 있습니다. 다음 명령은 15초 동안 멈춘 후 비프음을 발생시킵니다:

sleep 15 && echo -en ' 07'

두 명령 사이 일시 정지

sleep 명령어를 사용하여 두 명령 사이에 일시 정지를 설정할 수 있습니다. 다음 명령은 ‘Documents’ 디렉토리 내의 파일 목록을 출력하고, 5초 동안 일시 중지한 다음 현재 작업 디렉토리를 홈 디렉토리로 변경합니다:

ls -R ~/Documents && sleep 5 && cd ~

스크립트 실행 일시 정지

쉘 스크립트에서는 sleep 명령어를 사용하여 스크립트 실행을 특정 시간 동안 멈출 수 있습니다. 이 기능은 스크립트가 다음 단계를 진행하기 전에 다른 프로세스가 완료될 때까지 기다리는 데 유용합니다. 또한, 스크립트가 다른 리소스에 요청을 보내는 속도를 제어하는 데도 활용할 수 있습니다.

예를 들어, 다음 스크립트는 curl 명령을 사용하여 Google 웹 서비스에 요청을 보냅니다. ISBN 책 번호를 입력하면, 해당 책에 대한 JSON 데이터가 반환됩니다. jq 유틸리티를 사용하여 데이터를 파싱하여 책 제목을 검색할 수 있습니다. 웹 서비스에 과도한 부담을 주지 않기 위해, 각 웹 요청 사이에 1초 동안 sleep 명령어를 사용하여 일시 정지를 줍니다.

아래 코드를 복사하여 `check_book.sh`라는 이름으로 저장합니다:

#!/bin/bash

for book in `cat $1`
do
 echo $book":"
 curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title'
 echo ""
 sleep 1
done

echo "All done."

다음 명령어를 실행하여 스크립트에 실행 권한을 부여하고 실행 가능하게 만듭니다:

chmod +x check_book.sh

이 스크립트는 curljq 유틸리티를 필요로 합니다. Ubuntu 또는 다른 Debian 기반 배포판을 사용한다면 apt-get을 사용하여 해당 패키지를 설치합니다. 다른 리눅스 배포판에서는 해당 배포판의 패키지 관리 도구를 사용합니다.

sudo apt-get install curl
sudo apt-get install jq

다음 숫자를 포함하는 텍스트 파일을 만들어 `books.txt`로 저장합니다:

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

다음 명령어를 사용하여 스크립트를 실행하고 `books.txt` 파일을 매개변수로 전달합니다:

./check_book.sh books.txt

위 명령은 1초 간격으로 Google 웹 서비스에 요청을 보냅니다. 각 ISBN 번호에 대한 쿼리가 완료된 직후 책 제목이 출력됩니다. 이 스크립트는 sleep 명령어의 유효한 사용 사례를 보여주기 위해 선택되었습니다.

스크립트의 두 가지 주요 구성 요소에 대한 자세한 내용은 curl 프로젝트 페이지 및 jq 온라인 설명서를 참조하십시오.