리눅스 환경에서는 주기적인 작업을 자동으로 실행할 필요가 있을 때, `crontab`을 사용하여 이를 간편하게 설정할 수 있습니다.
이 글에서는 리눅스에서 `crontab`을 설정하고 사용하는 방법을 정리해 보도록 하겠습니다. 👩🏻💻
crontab 이란 ⁉️
crontab은 리눅스와 유닉스 시스템에서 특정 주기로 명령어를 실행할 수 있는 시스템 도구입니다.
예를 들어, 매일 백업을 수행하거나, 정해진 시간에 로그 파일을 관리하는 등의 작업을 자동으로 처리할 수 있습니다.
- 주요 사용 예시
- 매일 새벽 2시에 서버 백업
- 매주 월요일 오전 9시에 서버 리소스 모니터링
- 매일 밤 11시에 로그 파일을 정리
crontab 기본 사용법
crontab은 5개의 필드로 구성된 설정 파일입니다.
각각의 필드는 어떤 작업을 언제 실행할지에 대한 정보를 담고 있습니다.

예시) 매일 2시 30분에 백업 실행
30 2 * * * /home/user/backup.sh
- 30: 분 (30분)
- 2: 시 (2시)
- *: 매일
- *: 매월
- *: 매일요일
예시) 매주 월요일 오전 9시 시스템 리포트 생성
0 9 * * 1 /usr/local/bin/system-report
- 0: 분 (0분)
- 9: 시 (9시)
- *: 매일
- *: 매월
- 1: 월요일
crontab 명령어
- crontab -e: crontab 편집 모드. 작업 추가/수정.
- crontab -l: 현재 등록된 cron 작업 목록 확인.
- crontab -r: 모든 cron 작업 삭제.
crontab의 특수 문자 사용법
1) *(별표)
모든 값을 의미합니다. 예를 들어, 분(*)이 설정되면 매분마다 명령어가 실행됩니다.
* * * * * echo "Hello, World!" # 매분 "Hello, World!" 출력
2) ,(쉼표)
여러 값을 나열할 때 사용합니다.
0 8,12,18 * * * /path/to/script # 8시, 12시, 18시에 실행
3) -(하이폰)
범위 설정 시 사용합니다.
0 9-17 * * * /path/to/script # 9시부터 17시까지 매 시간마다 실행
4) /(슬래시)
간격을 설정할 때 사용합니다.
*/5 * * * * /path/to/script # 5분마다 실행
실전 예시 📖
예시 1: 서버 백업 자동화
매일 새벽 2시에 자동으로 서버 백업을 수행하는 crontab 예시입니다. backup.sh 스크립트를 실행하여 데이터베이스나 파일 시스템을 백업합니다.
30 2 * * * /home/user/backup.sh
backup.sh 스크립트 내용
#!/bin/bash
tar -czf /home/user/backup/backup-$(date +\%Y\%m\%d).tar.gz /home/user/data
- tar 명령어를 사용하여 /home/user/data 폴더를 압축하고, 백업 파일을 날짜별로 저장합니다.
예시 2: 로그 파일 정리
매일 자정에 로그 파일을 정리하는 crontab 예시입니다. 예를 들어, /var/log 폴더에 있는 오래된 로그를 삭제합니다.
0 0 * * * find /var/log -name "*.log" -type f -mtime +30 -exec rm -f {} \;
- find 명령어로 30일 이상 된. log 파일을 찾아 삭제합니다.
환경 변수 설정 ⚙️
1) PATH 변수 설정
PATH란?
- PATH는 시스템에서 명령어를 찾는 디렉터리 경로 목록입니다.
- cron 작업에서 실행되는 기본 PATH는 일반 사용자 환경에서 설정된 것보다 제한적입니다.
예를 들어, /usr/bin에만 접근 가능한 경우, /usr/local/bin의 명령어는 찾을 수 없습니다.
crontab 파일에 직접 PATH 변수를 설정하여 명령어가 실행되는 경로를 명시적으로 지정할 수 있습니다.
설정 방법
- crontab -e 명령어로 crontab 파일을 편집합니다.
- 파일 맨 위에 PATH 변수를 설정합니다.
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- 위 설정은 명령어를 /usr/local/bin, /usr/bin, /bin 등에서 찾게 합니다.
Python 스크립트를 실행하는 crontab 예시
PATH=/usr/local/bin:/usr/bin:/bin
0 2 * * * python3 /home/user/script.py
- 만약 Python이 /usr/local/bin에 설치되어 있다면, 위와 같이 PATH에 /usr/local/bin을 포함해야 cron에서 제대로 실행됩니다.
확인 방법
- cron 로그 확인: 명령어가 실행되지 않을 경우, /var/log/syslog에서 에러 로그를 확인합니다.
grep CRON /var/log/syslog
- 디버깅 방법: 스크립트 내에 echo $PATH를 출력하여 현재 cron 환경의 PATH를 확인합니다.
2) MAILTO 설정
MAILTO란?
- MAILTO는 작업 실행 결과(표준 출력 및 오류 출력)를 특정 이메일 주소로 전송할 때 사용하는 환경 변수입니다.
- MAILTO를 설정하면, 작업 성공 여부 및 오류 내용을 확인할 수 있어 디버깅에 유용합니다.
설정 방법
1. crontab -e 명령어로 crontab 파일을 편집합니다.
2. 파일 맨 위에 MAILTO 변수를 추가합니다.
MAILTO="admin@example.com"
3. 원하는 작업을 설정합니다.
* * * * * /path/to/script
이메일 전송 조건
작업 결과가 출력될 경우에만 이메일이 전송됩니다.
- 표준 출력(stdout) 또는 오류 출력(stderr)이 없는 경우 이메일은 전송되지 않습니다.
- 결과가 필요 없으면 명령어 뒤에 >/dev/null 2>&1을 추가하여 출력을 무시할 수 있습니다.
예시
매일 자정에 로그를 삭제하고 결과를 이메일로 받는 설정
MAILTO="admin@example.com"
0 0 * * * find /var/log -name "*.log" -type f -mtime +30 -exec rm -f {} \;
출력을 무시하고 이메일을 전송하지 않도록 설정
MAILTO=""
0 0 * * * find /var/log -name "*.log" -type f -mtime +30 -exec rm -f {} \; >/dev/null 2>&1
crontab 문제 해결
1) 작업이 실행되지 않는 경우
- 경로 문제: cron은 기본적으로 제한된 환경에서 실행되므로, 명령어의 전체 경로를 사용해야 할 수 있습니다.
- 로그 파일 확인: /var/log/syslog 또는 /var/log/cron에서 오류를 확인하세요.
2) cron 서비스가 멈춘 경우
- cron 서비스가 중지된 경우, 이를 다시 시작해야 합니다.
sudo systemctl start cron # Ubuntu/Debian 계열
sudo service cron start # CentOS/RHEL 계열
crontab 사용 시 유용한 팁📍
1) 출력을 파일로 저장
cron 작업의 출력 결과를 로그 파일에 저장하여 후속 처리가 가능하게 합니다.
30 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
- >>는 출력을 backup.log에 추가하고, 2>&1은 오류 메시지도 동일한 파일에 기록합니다.
2) 작업의 결과 이메일로 받기
MAILTO 변수와 함께 설정하여 작업이 완료되면 이메일로 결과를 받을 수 있습니다.
MAILTO="admin@example.com" 30 2 * * * /home/user/backup.sh
💡 리눅스 crontab은 반복적인 작업을 자동화할 수 있는 강력한 도구입니다.
이를 활용하면 시스템 관리와 서버 작업을 더욱 효율적으로 처리할 수 있습니다. 다양한 예시를 통해 자신에게 맞는 crontab 설정을 할 수 있고, 이를 통해 시간을 절약하며 안정적인 시스템 운영을 할 수 있습니다.
'Infra > Linux' 카테고리의 다른 글
| [Linux] 리눅스에서 grep 사용법 (0) | 2024.09.14 |
|---|---|
| 리눅스에서 scp 사용법: 안전하게 파일 전송하기 (1) | 2024.09.11 |