2016-09-11 24 views
1

メールを送信するためのcronジョブを作成するために、HerokuでAPSchedulerとSendGridを使用しようとしています。HerokuでAPSchedulerを使用してcronジョブをスケジュールするにはどうすればよいですか?

add_jobメソッド呼び出しが正しく実行されているように見えますが、次のエラーが発生しています。

以下は、私は以下のclock.pyファイル内にある1つのクロック・プロセスを、実行していますHerokuの

2016-09-11T22:33:37.776867+00:00 heroku[clock.1]: State changed from crashed to starting 
2016-09-11T22:33:40.672563+00:00 heroku[clock.1]: Starting process with command `python clock.py` 
2016-09-11T22:33:41.353373+00:00 heroku[clock.1]: State changed from starting to up 
2016-09-11T22:33:43.527949+00:00 app[clock.1]: created background scheduler 
2016-09-11T22:33:43.528848+00:00 app[clock.1]: started background scheduler 
2016-09-11T22:33:43.572751+00:00 app[clock.1]: added cron job 
2016-09-11T22:33:43.585801+00:00 app[clock.1]: Exception in thread APScheduler (most likely raised during interpreter shutdown): 
2016-09-11T22:33:43.585807+00:00 app[clock.1]: Traceback (most recent call last): 
2016-09-11T22:33:43.585808+00:00 app[clock.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 801, in __bootstrap_inner 
2016-09-11T22:33:43.585810+00:00 app[clock.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 754, in run 
2016-09-11T22:33:43.585827+00:00 app[clock.1]: File "/app/.heroku/python/lib/python2.7/site-packages/apscheduler/schedulers/blocking.py", line 29, in _main_loop 
2016-09-11T22:33:43.585829+00:00 app[clock.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 614, in wait 
2016-09-11T22:33:43.585848+00:00 app[clock.1]: File "/app/.heroku/python/lib/python2.7/threading.py", line 364, in wait 
2016-09-11T22:33:43.585851+00:00 app[clock.1]: <type 'exceptions.ValueError'>: list.remove(x): x not in list 
2016-09-11T22:33:43.695569+00:00 heroku[clock.1]: Process exited with status 0 
2016-09-11T22:33:43.719265+00:00 heroku[clock.1]: State changed from up to crashed 

からログです。

from apscheduler.schedulers.background import BackgroundScheduler 
import sendgrid 
import os 
from sendgrid.helpers.mail import * 

def send_email(): 
    try: 
    sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY')) 
    print("created send grid api client") 
    from_email = Email("[email protected]") 
    print("created from email") 
    subject = "Weekly update" 
    to_email = Email("[email protected]") 
    print("created to email") 
    content = Content("text/plain", "Hello, Email!") 
    print("created content") 
    mail = Mail(from_email, subject, to_email, content) 
    print("created mail") 
    response = sg.client.mail.send.post(request_body=mail.get()) 
    except Exception as e: 
    return e 

try: 
    sched = BackgroundScheduler() 
    print("created background scheduler") 
    sched.start() 
    print("started background scheduler") 
    sched.add_job(send_email, 'cron', day_of_week=6, hour=22, minute=20) 
    print("added cron job") 
except Exception as e: 
    print e.message 

ここは私のProcfileです。

clock: python clock.py 

ここに私のrequirements.txtファイルがあります。

APScheduler==3.1.0 
sendgrid==3.4.0 

私が間違っていることを教えてもらえますか?

答えて

0

バックグラウンドスケジューラを開始しましたが、メインスレッドを終了することができました。これも時計プロセスを終了します。これがBlockingSchedulerが存在する全理由です。あなたはHerokuのAPScheduler instructionsを読まないのですか?

+0

ありがとうございます。これらの手順を参照していただきありがとうございます。私が最初にこれらの命令を試したとき、私の時計プロセスは明らかな理由がないのでSIGTERMで終了しました。これは私が間違って何かをしていることを意味していたと思ったので、私はスケジューラのタイプを変更すると考えました。今私はcronジョブを実行する時間でないときに時計プロセスが終了することを知っています。 –

+0

あなたはそれについてかなり確信していますか?私はHerokuをあまり使用していないが、少なくともAPSchedulerが関与している場合は、ちょっと奇妙に思える。プロセスはそれ自身で終了するべきではありません。 –

関連する問題