crontab은 리눅스에서 특정 시간에 작업을 예약할 수 있는 도구입니다.
반복적으로 실행해야 하는 작업(백업, 로그 관리, 보고서 생성 등)을 자동화할 때 사용합니다.
컴퓨터가 사람이 입력하지 않아도 스스로 명령어를 실행하는 자동 스케줄러라고 보면 됩니다.
crontab은 시스템의 크론 데몬(cron daemon)이라는 프로그램이 정해진 시간에 작업을 실행합니다.
우리는 crontab 명령어를 사용해서 작업 일정을 작성하고 수정합니다.
crontab -e
crontab -l
crontab -r
sudo crontab -u username -e
기본 구조
<분> <시간> <일> <월> <요일> <실행할 명령어>
: "모두"를 의미. (ex. * * * *` → 매분 실행),: 여러 값 지정. (ex. 1,15 → 1분, 15분에 실행): 범위 지정. (ex. 1-5` → 1분부터 5분까지 실행)/: 주기 지정. (ex. /5 → 5분마다 실행)30 0 * * * /home/user/backup.sh
/home/user/backup.sh를 실행.0 9 * * 1 /home/user/weekly_report.sh
/home/user/weekly_report.sh를 실행.0 0 1 * * /home/user/monthly_cleanup.sh
/home/user/monthly_cleanup.sh를 실행.0 * * * * /home/user/hourly_task.sh
/home/user/hourly_task.sh를 실행.* * * * * echo "Hello, world!"
0 10 15,30 * * /home/user/special_task.sh
*/30 8-18 * * * /home/user/interval_task.sh
crontab에서 실행되는 작업은 터미널과 환경 변수가 다를 수 있습니다.
필요한 경로나 환경 변수를 스크립트에 명시해 주어야 합니다.
예:
#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin
my_command
crontab 작업 결과를 로그 파일로 남기면 문제를 추적하기 쉬워집니다.
예:
30 0 * * * /home/user/task.sh >> /home/user/task.log 2>&1
>>: 출력 결과를 로그 파일에 추가.2>&1: 오류 메시지도 로그 파일에 포함.작업이 잘 실행되는지 확인하려면 테스트 작업을 설정해 볼 수 있습니다.
예: 매분 실행
* * * * * echo "Crontab Test" >> /home/user/test.log
서버가 다른 시간대를 사용한다면, 작업 전에 시간대 설정을 확인하세요.
/var/log/cron)tail -f /var/log/syslog
/home/user/task.sh
chmod +x /home/user/task.sh
스크립트 작성
/home/user/copy_yesterday_logs.sh#!/bin/bash
YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
SOURCE_LOG="/var/log/nethru/access.log.${YESTERDAY}"
DEST_SERVER="user@156"
DEST_PATH="/backup/nethru/"
scp ${SOURCE_LOG} ${DEST_SERVER}:${DEST_PATH}
crontab에 등록
crontab -e
추가 내용:
30 0 * * * /home/user/copy_yesterday_logs.sh
자동화를 통해 시간을 절약하고, 더 효율적으로 시스템을 관리해 보자! 😊