Linux crontab PHP에 응용하기 - 예약메일 발송등...
crontab을 이용한 응용이다.
아주 간단하지만 이제막 입문한 프로그래머들에게 조금이나마 도움이 되고 흥미로운 작업이 되었음 좋겠다.
crontab은 예약을 해둘 수 있는 기능이다.
예를 들어 매일 일정 시간에 알아서 DB를 백업하거나 특정 경로를 백업하게 할 수 있다.
그리고 php도 실행을 할 수 있다.
이것을 응용하면
- 메일을 예약 발송하거나
- 주기적으로 불필요한 temp파일을 지우거나
- DB을 제어 하거나(쓰고,지우고,수정하는 등)
아무튼 php로 구현할 수 있는 모든 것을 구현하여 제어 할 수 있다.
진행 했던 일중에 매일 매일 이메일을 보내 주는 기능이 필요했다.
관리자가 발송할 날짜를 선택해서 DB에 저장을 하면 해당 날짜에 발송이 되는 것이다.
이 경우의 진행될 프로세스이다.
관리자가 메일 내용과 함께 예약일 입력 > DB에 저장 > 예약일인 오늘 날짜인 데이터를 불러오고 반복문을 사용하여 수 만큼 이메일로 발송하는 php문서 작성 > crontab에 매일 오전 8시에 메일 발송하는 php문서를 실행 하도록 선언 > 다음날 오전 8시 crontab에서 php문서를 실행. 메일 발송됨.
나머지는 넘어 가고 crontab에 추가 하여 실행 되도록 하겠다.
crontab 파일은 /etc/crontab 에 있다.
쉘상에서 해당 파일을 vi 편집기로 열어 주면
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
00 08 * * * root /usr/local/php/bin/php /home/userid/send_mail.php
라는 내용이 보인다.
감이 올것이다!
#run-parts 아래가 바로 실행하는 부분이다.
파란색으로 표시된 부분은 한시간,하루,한주,한달 단위로 실행할 명령을 따로 모아둔 것을 불러 오는 부분이다. 쉽게말해 인쿨르드 시키는 것이다.
빨강색 부분이 직접 추가한 메일을 발송하는 부분이다.
앞쪽의 숫자 부분이 시간을 지정하는 부분인데 분,시간,일,월,년 순이다.
숫자를 쓰면 되고 *는 항상을 뜻한다.
/usr/local/php/bin/php 부분은 알아서 각서버의 해당 위치로 지정해 주면 되겠다.