크론을 활용한 프로세스 메모리 사용량 주기적 모니터링 구현

크론 작업 계획 설정

시스템의 crontab -e 명령어를 실행하면 기본 텍스트 에디터가 열리며, 여기에 정기적으로 수행할 작업을 입력합니다. 저장 후 /var/spool/cron/crontabs/ 디렉터리에 사용자 이름으로 된 파일이 생성됩니다.

작업 스케줄링 포맷 설명

각 줄은 6개의 필드로 구성되며, 형식은 다음과 같습니다:

minute hour day month weekday command
  • *: 모든 값 포함 (예: 매시간)
  • /n: n 단위 간격 (예: */5는 5분마다)
  • -: 범위 지정 (예: 1-5는 1부터 5까지)
  • ,: 복수 값 분리 (예: 1,3,5)

예시 설정

  • 매일 오전 6시:
    0 6 * * * echo "Good morning." >> /tmp/test.log
  • 2시간 간격 실행:
    0 */2 * * * echo "Take a break." >> /tmp/test.log
  • 저녁 11시 ~ 오전 8시 사이 2시간 간격 + 오전 8시:
    0 23-7/2,8 * * * echo "Dream well." >> /tmp/test.log
  • 매월 4일 및 월~수요일 오전 11시:
    0 11 4 * 1-3 /path/to/script.sh
  • 매년 1월 1일 오전 4시:
    0 4 1 1 * SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ /path/to/script.sh

시스템 스크립트 자동 실행

크론이 제공하는 일일/주간/월간 폴더 실행 기능도 활용 가능합니다:

  • 01 * * * * root run-parts /etc/cron.hourly
  • 02 4 * * * root run-parts /etc/cron.daily
  • 22 4 * * 0 root run-parts /etc/cron.weekly
  • 42 4 1 * * root run-parts /etc/cron.monthly

run-parts는 디렉터리 내 모든 실행 가능한 스크립트를 자동으로 처리합니다. 만약 특정 스크립트만 실행하고 싶다면 해당 폴더 대신 파일 경로를 명시합니다.

임베디드 시스템에서의 문제 해결

임베디드 리눅스 환경에서 crontab -e 실행 시 아래 오류 발생:

crontab: chdir(/var/spool/cron/crontabs): No such file or directory

해결 방법:

mkdir -p /var/spool/cron/crontabs
cp /root/root /var/spool/cron/crontabs/
chmod 777 /var/spool/cron/crontabs/root
crond

이 스크립트는 시스템 부팅 초기 단계에서 실행되어야 하므로 ~ 대신 절대 경로 사용이 필요합니다.

프로세스 메모리 사용량 모니터링 스크립트

크론이 주기적으로 실행할 스크립트 예제입니다. 특정 프로세스의 메모리 사용량을 실시간으로 측정합니다:

#!/bin/sh
LOG_FILE="/var/log/memory_monitor.log"
PROCESS_NAME="XXX"

# 프로세스 ID 추출
PID=$(ps | grep "$PROCESS_NAME" | sed -n '1p' | awk '{print $1}')

if [ -n "$PID" ]; then
    # 전체 메모리 상태 기록
    free >> "$LOG_FILE"
    # 프로세스의 가상 메모리 크기 출력
    cat /proc/$PID/status | grep VmSize >> "$LOG_FILE"
else
    echo "$(date): Process $PROCESS_NAME not found." >> "$LOG_FILE"
fi

내장 시스템의 커널 버전이나 프로세스 정보 출력 방식에 따라 VmSize 또는 VmPeak, VmRSS 등 다른 필드로 조정 가능합니다.

태그: crontab linux embedded systems memory monitoring Shell scripting

6월 23일 18:40에 게시됨