크론 작업 계획 설정
시스템의 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.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 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 등 다른 필드로 조정 가능합니다.