우분투 실전 명령어 | crontab 정기 작업 등록과 로그 검증
서버에서 반복 작업(백업, 로그 정리, 상태 체크)을 수동으로 돌리다 보면 빠뜨리는 날이 꼭 생깁니다. 이럴 때 cron으로 실행 주기를 고정해두면 운영이 훨씬 안정됩니다. 다만 환경변수, 작업 경로, 로그 처리까지 같이 설계해야 나중에 문제를 빨리 잡을 수 있습니다.
바로 쓰는 명령어
# 현재 사용자 crontab 확인
crontab -l
# 편집기 열기
crontab -e
# 매일 03:10에 백업 스크립트 실행 + 로그 파일 누적
10 3 * * * /usr/local/bin/backup-db.sh >> /var/log/backup-db.log 2>&1
# 5분마다 디스크 사용량 기록
*/5 * * * * /bin/df -h >> /var/log/disk-usage.log 2>&1
# 시스템 전체 cron 로그 확인
sudo journalctl -u cron -n 100 --no-pager
# 작업 로그 실시간 확인
tail -f /var/log/backup-db.log
핵심 옵션/패턴
crontab -e: 현재 사용자 기준 스케줄 편집crontab -l: 등록된 항목 조회MAILTO="": cron 메일 비활성화(메일 설정 안 쓸 때)- 절대경로 사용: cron은 PATH가 좁아서
python,bash같은 명령이 실패할 수 있습니다. - 실행 위치 고정: 필요한 경우
cd /path && ./script.sh형태로 작업 디렉터리를 명시하세요.
# 예: 작업 디렉터리 고정 + 스크립트 실행
0 * * * * cd /opt/myjob && /usr/bin/bash run.sh >> /var/log/myjob.log 2>&1
자주 하는 실수
- 쉘에서 되던 명령을 cron에 그대로 넣고 PATH 문제로 실패
- 로그 리다이렉션(
>> ... 2>&1) 없이 등록해서 실패 원인을 못 찾음 * * * * *를 테스트용으로 넣어두고 제거를 까먹어 과도 실행- 상대경로(
./script.sh)를 사용해서 cron 환경에서 파일을 못 찾는 문제
검증 방법
# crontab 파싱 결과 확인
crontab -l | sed -n '1,120p'
# cron 서비스 상태 확인
systemctl status cron --no-pager
# 최근 30분 cron 실행 로그 필터
sudo journalctl -u cron --since "30 min ago" --no-pager
# 작업이 실제로 파일을 남기는지 확인
ls -lh /var/log/backup-db.log /var/log/disk-usage.log
운영 팁
실서비스에서는 작업마다 로그 파일을 분리하고, logrotate와 같이 묶어서 관리하는 게 좋습니다. 또 백업/정리 작업은 시작 전에 잠금 파일(flock)을 걸어 중복 실행을 막아두면 장애 가능성을 크게 줄일 수 있습니다.
출처
Ubuntu Server Guide
crontab man page
systemd journalctl man page