환경 변수 · Bash 스크립트 · cron
환경 변수로 경로를 관리하고, Bash 스크립트(monitor.sh)로 상태를 수집하고, cron으로 그 스크립트를 자동 실행하는 흐름을 한 페이지에 모았다.
환경 변수
개념
환경 변수는 프로세스가 실행될 때 참조하는 키-값 쌍이다. 코드에 경로를 하드코딩하지 않고 환경 변수로 관리하면 환경(개발/운영)이 바뀌어도 코드 수정 없이 동작한다.
기본 사용법
bash
# 임시 설정 (현재 세션만 유효)
export AGENT_HOME=/home/agent-admin/agent-app
# 확인
echo $AGENT_HOME
printenv AGENT_HOME
# 전체 환경 변수 목록
env영구 적용 방법
bash
# 특정 사용자에게 적용
vi /home/agent-admin/.bashrc
# 파일 끝에 추가
export AGENT_HOME=/home/agent-admin/agent-app
export AGENT_PORT=15034
export AGENT_UPLOAD_DIR=$AGENT_HOME/upload_files
export AGENT_KEY_PATH=$AGENT_HOME/api_keys/t_secret.key
export AGENT_LOG_DIR=/var/log/agent-app
# 적용
source /home/agent-admin/.bashrcBash 쉘 스크립트
기본 구조
bash
#!/bin/bash
# 첫 줄은 항상 인터프리터 선언 (shebang)
# 변수
NAME="agent"
echo "Hello,$NAME"
# 조건문
if [ -z "$PID" ]; then
echo "프로세스 없음"
exit 1
fi
# 명령어 결과를 변수에 저장
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')monitor.sh에서 자주 쓰는 패턴
bash
# 프로세스 PID 가져오기
PID=$(pgrep -f agent_app.py)
# 포트 LISTEN 확인
ss -tulnp | grep ":15034" > /dev/null 2>&1
# CPU 사용률
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
# 메모리 사용률
MEM=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100}')
# 디스크 사용률
DISK=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
# 로그 기록
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$TIMESTAMP] PID:$PID CPU:${CPU}% MEM:${MEM}% DISK_USED:${DISK}%" >> /var/log/agent-app/monitor.log종료 코드 규칙
| 코드 | 의미 |
|---|---|
exit 0 | 정상 종료 |
exit 1 | 오류 종료 |
스크립트가 exit 1로 끝나면 cron이나 다른 스크립트에서 실패로 감지할 수 있다.
cron 자동화
개념
cron은 정해진 시간에 명령어나 스크립트를 자동 실행하는 스케줄러다.
crontab 편집
bash
# agent-admin 계정으로 crontab 편집
crontab -e
# 등록
* * * * * /home/agent-admin/agent-app/bin/monitor.sh
# 확인
crontab -l시간 표현 형식
* * * * * 실행할명령어
| | | | |
| | | | +-- 요일 (0=일요일, 6=토요일)
| | | +----- 월 (1-12)
| | +-------- 일 (1-31)
| +----------- 시 (0-23)
+-------------- 분 (0-59)
* = 매번 (모든 값)| 표현 | 의미 |
|---|---|
* * * * * | 매분 실행 |
0 * * * * | 매 정시 실행 |
0 9 * * 1 | 매주 월요일 9시 실행 |
정리
| 항목 | 내용 |
|---|---|
| 환경 변수 | export 는 현재 세션만 유효, .bashrc 에 추가 후 source 하면 영구 적용 |
| Bash 스크립트 | shebang(#!/bin/bash), 변수, 조건문, $(...) 로 명령 결과 저장 |
| monitor.sh 수집 항목 | PID(pgrep), 포트(ss), CPU(top), 메모리(free), 디스크(df) → monitor.log |
| 종료 코드 | exit 0 정상, exit 1 오류 (cron 등에서 실패 감지) |
| cron | crontab -e 로 등록, * * * * * = 매분 실행, crontab -l 로 확인 |
출처: Codyssey-B1/B4-1
