정해진 시간에 자동으로 실행하기 (cron)
"매일 새벽 4시에 백업", "10분마다 상태 확인", "서버가 켜지면 봇 실행"처럼 정해진 때에 명령어를 자동으로 실행하는 방법입니다. Ubuntu·Debian 기준입니다.
먼저 서버 시간을 한국 시간으로
cron은 서버 시간대를 기준으로 동작합니다. 서버가 UTC(한국보다 9시간 느림)로 되어 있으면 "새벽 4시"가 한국 시간 오후 1시가 됩니다.
timedatectl # Time zone 줄 확인
sudo timedatectl set-timezone Asia/Seoul # 한국 시간으로 변경
sudo systemctl restart cron # cron이 바뀐 시간대를 쓰도록 재시작
crontab 열기
crontab -e
처음 실행하면 편집기를 고르라고 나오는데, nano(보통 1번)를 고르면 쉽습니다. 맨 아래에 예약할 내용을 한 줄씩 추가하고 Ctrl + O, Enter, Ctrl + X로 저장하고 나옵니다.
시간 적는 법
분 시 일 월 요일 실행할명령어
| 적는 법 | 의미 |
|---|---|
0 4 * * * | 매일 새벽 4시 |
*/10 * * * * | 10분마다 |
0 */6 * * * | 6시간마다 (0시, 6시, 12시, 18시) |
30 9 * * 1 | 매주 월요일 오전 9시 30분 |
0 0 1 * * | 매달 1일 자정 |
@reboot | 서버가 켜질 때 한 번 |
헷갈린다면 crontab.guru 사이트에 적어보면 언제 실행되는지 말로 풀어서 보여줍니다.
예시
# 매일 새벽 5시에 pm2로 돌리는 봇 재시작
0 5 * * * /usr/bin/pm2 restart my-bot >> /home/계정명/cron.log 2>&1
# 서버가 켜질 때 내 스크립트 실행
@reboot /home/계정명/start.sh >> /home/계정명/cron.log 2>&1
백업 예약은 서버 데이터 백업하기의 "매일 자동으로 백업하기"를 참고하세요.
꼭 지켜야 할 것
- 명령어와 파일은 전체 경로로 적습니다. cron은 평소 터미널과 환경이 달라서
pm2,node만 적으면 못 찾는 경우가 많습니다. 전체 경로는which pm2,which node로 확인합니다. - 결과를 로그 파일로 남깁니다. 줄 끝에
>> /home/계정명/cron.log 2>&1을 붙이면 실패했을 때 이유를 볼 수 있습니다. - 스크립트에는 실행 권한을 줍니다.
chmod +x start.sh - 명령어 안의
%는\%로 적습니다. cron에서%는 줄바꿈으로 해석됩니다. (예:$(date +\%F)) - 관리자 권한이 필요한 작업(서버 재부팅 등)은
sudo crontab -e에 등록합니다.
잘 등록됐는지 확인
crontab -l # 등록된 목록 보기
journalctl -u cron --since today # 오늘 cron 실행 기록
Windows 서버라면
Windows에서는 "작업 스케줄러"가 같은 역할을 합니다. Windows 서버에서 프로그램 자동 실행하기를 참고하세요.