우분투 실전 명령어 | watch로 실시간 상태 모니터링
언제 쓰는가
top을 계속 띄워두기 부담스럽고, 특정 명령 결과만 주기적으로 확인하고 싶을 때 watch가 깔끔하다.
배포 직후 에러 로그 증가 여부, 디스크 사용량 변화, 헬스체크 응답 변화를 짧게 추적할 때 특히 유용하다.
바로 쓰는 명령어
# 1) 2초마다 디스크 사용량 확인
watch -n 2 'df -h /'
# 2) 1초마다 systemd 서비스 상태 확인
watch -n 1 'systemctl is-active nginx; systemctl is-failed nginx'
# 3) 변경된 줄 강조해서 로그 카운트 추적
watch -n 2 -d 'journalctl -u nginx --since "5 min ago" | wc -l'
# 4) API 헬스체크 응답 코드 감시
watch -n 3 'curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/health'
# 5) 프로세스 개수 추적
watch -n 2 'pgrep -fc "gunicorn"'
# 6) 날짜와 함께 상태를 같이 보기
watch -n 2 'date "+%F %T"; ss -lntp | head -n 15'
핵심 옵션/패턴
- -n N: 실행 주기를 초 단위로 지정한다. 너무 짧게 잡으면 서버와 터미널 둘 다 피곤해진다.
- -d: 직전 결과와 달라진 부분을 강조해 변화 지점을 바로 찾기 쉽다.
- -t: 상단 헤더를 숨겨 출력만 깔끔하게 보고 싶을 때 쓴다.
- -g: 화면 내용이 바뀔 때 종료한다. 특정 상태 변화 대기 스크립트에 유용하다.
실무에서는 watch 안에 긴 파이프라인을 넣기보다, 먼저 단일 명령으로 검증한 뒤 옮겨 넣는 방식이 안전하다.
명령 출력 예시
$ watch -n 2 -d 'df -h /'
Every 2.0s: df -h / ubuntu-host: Thu Feb 19 01:16:40 2026
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 98G 61G 33G 66% /
$ watch -n 3 'curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/health'
Every 3.0s: curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/health
200
자주 하는 실수
- watch 안에 따옴표가 꼬인 복잡한 명령을 바로 넣어 문법 오류를 낸다.
- 0.2초 같은 과도한 주기로 실행해서 I/O와 CPU를 불필요하게 소모한다.
- 종료 키를 몰라 세션을 방치한다. 기본 종료는 Ctrl+C다.
- 실패 시나리오를 안 보고 정상값만 보다가 장애 전조를 놓친다.
검증 방법
# watch에 넣기 전, 명령 단독 실행으로 먼저 확인
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/health
# watch 실행 후 10초 정도 변화 확인
watch -n 2 -d 'ss -s; echo; pgrep -fc nginx'
# 종료 후 셸이 정상 복귀하는지 확인
echo "watch 종료 확인"
검증할 때는 정상 상태뿐 아니라 서비스 중지, 포트 차단 같은 비정상 조건도 의도적으로 만들어 보는 편이 운영에 훨씬 도움이 된다.
운영 팁
장애 대응 중에는 watch 결과를 보는 사람과 조치하는 사람을 분리하면 실수가 줄어든다.
같은 명령을 여러 팀원이 반복 실행하는 대신 공용 tmux 창 하나에서 watch를 공유하면 상황 인식이 훨씬 빠르다.
출처
man watch
procps-ng manual
Ubuntu Manpages