Skip to content

환경 변수 · 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/.bashrc

Bash 쉘 스크립트 ​

기본 구조 ​

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 등에서 실패 감지)
croncrontab -e 로 등록, * * * * * = 매분 실행, crontab -l 로 확인

출처: Codyssey-B1/B4-1