2010-04-28 7 views
1

사용자가 메시지, 전자 메일 및 시간을 입력 할 수있는 python 스크립트를 작성하여 전자 메일을 보내려고합니다. 이것은 모두 mysql 데이터베이스에 저장됩니다.Python의 시간있는 전자 메일 알림

그러나이 시간과 날짜에 스크립트를 실행하려면 어떻게해야합니까? 크론 작업이 필요합니까? 2 월 15 일 2시 15 분에 2시 15 분에 스크립트가 데이터베이스에서 2시 15 분 동안 모든 항목을 검색하고 그 이메일을 보냅니다. 그러나 2:16의 이메일은 어떨까요?

제공되는 공유 호스팅을 사용하고 있으므로 계속해서 실행되는 스크립트가 없습니다. 당신이 지속적으로 실행되는 스크립트가없는 경우 즉, 당신의 OS 내부에 의존해야하므로

감사

+1

공유 호스트 환경이 유닉스'at' 또는'cron' 명령을 제공합니까? – unutbu

+0

그들 중 하나는 확실하게 크론 작업을 제공하고 다른 하나는 확인해야합니다. cron 작업없이이 작업을 수행 할 수있는 방법이 있습니까? – Ali

답변

2

는 뭔가를 트리거해야합니다. 유닉스 환경에서 크론 (cron) 작업은 스스로 상태대로 트릭을 수행합니다.

스크립트를 실행하도록 cron을 설정하고 주어진 시간 동안 스크립트를 대기시킨 다음 실행을 계속하고 다음 전자 메일이 주어진 시간 이상으로 전송 될 때까지 전송하십시오. 그런 다음 스크립트가 새로운 웨이크 업 시간을위한 새로운 크론 작업을 추가하도록 만듭니다. 이 장고 응용 프로그램이 당신의 상황에서 사람들을 위해 만들어진 것처럼

+1

그러나 시간의 정확성을 강조하려는 경우, 즉 귀하의 이메일은 귀하가 지정한 정확한 시간에 보내질 것입니다. 그런 다음 매분마다 크론 작업이 필요합니다. Gmail은 어떻게 생각하십니까? – Ali

+0

매 시간마다 cron 작업을 실행하고 다음 시간에 보낼 전자 메일이 있는지 확인할 수 있습니다. 그렇다면 지정된 시간까지 프로그램을 계속 실행 한 다음 스크립트를 닫으십시오. 다음 시간에 보낼 전자 메일이 없으면 즉시 스크립트를 닫습니다. – swanson

+1

나는 데이터베이스를 모두 건너 뛰고 스크립트에 전자 메일을 보내는 cron 작업을 추가하도록 제안하고 싶습니다. 키스. – daramarak

2

http://code.google.com/p/django-cron/

것은 또한 당신의 디자인은 약간의 결함이 보인다 ... 보인다. 2시 15 분에 실행중인 경우 2시 15 분에 전송해야하는 이메일 만 보내고 싶지는 않지만 보내지 않은 모든 이메일은 전송되지 않은 것입니다.

데이터베이스는해야 중 하나가 또는 B. 그것을 보내거나하지되었는지 여부를 저장하는 데이터베이스 테이블에 정의 된 열이 전송되면 A.이 항목을 삭제합니다. 그러면 논리가 해당 열을 사용해야합니다.

1

매분마다 cronjob이 그렇게 할 것입니다. 이 점을 고려한다면 다음 두 가지를 생각해보십시오.

1 - 분당 몇 개의 전자 메일이 전송 될 것으로 예상됩니까? 전자 메일을 보내는 데 1 초가 걸리고 분당 100 개의 전자 메일이 있으면 대기열을 완료하지 않습니다.

2 - 마지막 작업이 완료되기 전에 하나의 작업이 시작되면 어떻게됩니까? 전자 메일을 두 번 보내지 않도록주의하십시오. 첫 번째 프로세스가 종료되는지 확인 (위험 : 전자 메일을 마지막으로 삭제할 수 있음), 다음 프로세스 시작 (위험 : 첫 번째 프로세스가 전체 큐를 중단) 또는 병렬로 작업 (위험 : 동기화 문제)을 방지해야합니다.

마지막으로 새로운 cron 작업을 추가하는 스크립트를 만들라는 daramarak의 제안을 듣는다면 오류가 하나라도 발생하면 전체 시스템이 손상 될 위험이 있습니다.