Linux에서 Watch 명령을 사용하여 주기적으로 프로그램을 실행하는 방법

시스템의 여러 측면, 예를 들어 진행 중인 프로세스, 디스크 공간 사용량, 또는 사용자 로그인 상태 등을 지속적으로 확인해야 할 때가 있습니다. 이런 상황에서 리눅스의 watch 명령어는 수동으로 반복 작업을 수행하는 번거로움을 덜어주고 자동화된 모니터링을 가능하게 합니다.

이 명령어를 활용하면 사용자 로그인, 네트워크 상태, 메모리 및 CPU 사용량, 디스크 공간과 같은 시스템 활동을 실시간으로 감시할 수 있습니다. 지금부터 리눅스에서 watch 명령어를 사용하는 방법에 대해 자세히 알아보겠습니다.

watch 명령어란 무엇인가?

리눅스의 watch 명령어는 지정된 명령어 또는 프로그램을 일정 시간 간격으로 반복 실행하고 그 결과를 터미널에 표시해주는 유용한 도구입니다. 이를 통해 실시간으로 출력 결과의 변화를 쉽게 확인할 수 있으며, 각 간격마다 출력을 갱신하여 이전 결과를 덮어쓰는 방식으로 작동합니다. 기본적으로 2초 간격으로 명령어를 반복 실행하며, Ctrl + C 키를 눌러 수동으로 종료할 때까지 계속 실행됩니다.

watch 명령어 구문

watch 명령어의 기본적인 구문은 다음과 같습니다.

 watch 옵션 <명령어> 

다양한 명령줄 옵션을 watch 명령어와 함께 사용할 수 있습니다. 옵션 없이 watch 명령어를 실행하면, 기본적으로 2초마다 지정한 명령어가 실행됩니다. 예를 들어, 다음은 ls 명령어의 결과를 실시간으로 보여주는 예시입니다.

 watch ls -l ~/ 

이 명령을 실행하면 홈 디렉토리의 파일 목록이 2초마다 새로 고쳐지며, 파일이 생성, 삭제, 또는 크기 변경될 때마다 변경 사항을 실시간으로 확인할 수 있습니다.

watch를 사용하여 X초마다 명령어 실행

watch 명령어의 갱신 간격을 변경하여, 지정된 명령어 실행 전에 설정된 시간만큼 대기하도록 할 수 있습니다. 갱신 간격을 변경하려면 -n 옵션과 함께 원하는 시간 간격(초)을 지정하면 됩니다.

 watch -n <시간(초)> <명령어> 

예를 들어, 5초마다 명령을 실행하려면 다음과 같이 입력합니다.

 watch -n 5 <명령어> 

업데이트 간 변경 사항 강조

watch 명령어는 기본적으로 화면을 갱신할 때마다 이전 출력을 덮어씁니다. 하지만 -d 옵션을 사용하면 이전 출력과 비교하여 변경된 부분을 강조 표시하여 쉽게 식별할 수 있도록 도와줍니다.

 watch -d <명령어> 

watch 명령어 출력에서 헤더 숨기기

watch 명령어는 기본적으로 업데이트 간격, 실행한 명령어, 시스템의 현재 날짜와 시간 등을 포함하는 헤더를 출력 결과 상단에 표시합니다. 이러한 헤더 정보를 숨기고 싶다면 -t 옵션을 사용하면 됩니다.

 watch -t <명령어> 

오류 시 경고음 재생

리눅스에서 프로세스가 종료될 때, 종료 코드가 반환됩니다. 성공적으로 완료된 경우 0을 반환하고, 오류가 발생한 경우에는 0이 아닌 값을 반환하는 것이 일반적입니다. watch 명령어의 -b 옵션을 사용하면 명령어 실행 결과가 0이 아닌 값을 반환할 때 경고음을 울려 사용자에게 오류 발생을 알릴 수 있습니다.

예를 들어, sshd.service 서비스를 모니터링하면서 서비스가 중지될 때 알림을 받고 싶다면 다음과 같이 사용할 수 있습니다.

 watch -b sudo systemctl status sshd.service 

이 명령은 서비스가 중지되면 경고음을 울립니다. 서비스가 다시 시작되면 경고음이 멈춥니다. 이 기능을 테스트하려면 별도의 터미널 창에서 서비스를 중지해보세요. 서비스가 다시 시작될 때까지 경고음이 계속 울릴 것입니다. 참고로, 경고음 기능을 사용하려면 시스템에 경고음 관련 패키지가 설치되어 있어야 합니다.

출력 변경 시 watch 명령어 종료

watch 명령어가 실행 중에 명령어의 출력이 변경되었을 때, 자동으로 종료되도록 설정할 수도 있습니다. 이 기능은 -g 옵션을 사용하여 활성화할 수 있으며, 특정 출력 변화를 기다리는 상황에서 매우 유용하게 활용될 수 있습니다.

출력이 변경되면 watch 명령어는 즉시 종료됩니다. 이 기능은 echo 명령어와 함께 사용하여 화면에 메시지를 표시하는 방식으로 활용할 수 있습니다.

예를 들어, 특정 파일이 특정 디렉토리에 생성될 때까지 기다리는 상황을 생각해봅시다. 다음 명령어는 지정된 파일이 생성된 디렉토리를 감시하고, 파일이 생성되는 즉시 watch 명령어 실행을 중단하고 “file arrived”라는 메시지를 터미널에 출력합니다.

 watch -g "ls -l | grep filename" && echo "file arrived" 

또 다른 예로, 특정 사용자가 시스템에 로그인했을 때 알림을 받는 방법을 살펴보겠습니다.

 watch -g "who | grep username" && echo "username logged in" 

이 명령은 시스템에 로그인한 사용자 목록을 출력하는 who 명령어의 결과를 감시합니다. 지정된 사용자가 로그인하면 watch 명령어가 종료되고 터미널에 “username logged in” 메시지가 표시됩니다.

마찬가지로, 파일 내용에 변경 사항이 생겼을 때 watch 명령어를 종료하도록 설정할 수도 있습니다. 파이프로 연결된 일련의 명령어를 사용할 때는 전체 명령어를 따옴표로 묶어야 한다는 점을 기억해야 합니다.

리눅스 시스템에서 활동 모니터링

반복적으로 수행해야 하는 작업이 있다면, watch 명령어를 활용하여 자동화하는 것이 좋습니다. 이렇게 하면 명령어를 반복해서 입력할 필요 없이 변경 사항을 편리하게 확인할 수 있습니다.

watch 명령어는 다른 리눅스 명령어와 함께 사용하여 시스템 리소스와 활동을 모니터링하고 파일 또는 디렉토리의 변경 사항을 추적하는 데 매우 유용합니다.