cron job in google app engine not working -
i have taken basic python 3 tutorial website on flask google cloud tutorial , able set , website works fine.
in addition , wanted run python script runs everyday collect data, cron job doesn't work. added login: admin restrict directly use url
cron.yaml
cron: - description: test dispatch vs target url: /cronapp schedule: every 5 hours app.yaml
runtime: python env: flex entrypoint: gunicorn -b :$port main:app runtime_config: python_version: 3 handlers: - url: /cronapp script: cronapp.py login: admin i calling http://myproject.appspot.com/cronapp doesn't work , returns 404. doing wrong ? appreciated
your app.yaml file mixing standard environment handlers element flexible environment configuration, ignored. can see cron requests in app's logs in developer console (likely errors, though).
you need add handler /cronapp inside app code, not in app.yaml. not entirely sure how (i'm still using standard environment), depends on app and/or framework. take @ hello world code review flask example.
update:
i may not entirely correct, based answer on documentation noticed inconsistencies (i sent documentation feedback google it).
the flexible environment securing urls cron (which appears copied the standard environment equivalent) mentions couple of solutions:
- one indeed based on
login: adminoptionhandler:
you can restrict url adding
login: adminhandler configuration section inapp.yaml. more information see securing urls
but handler not mentioned in configuring app app.yaml , securing urls pointing inexistent tag. i'm not sure if indeed working or not.
- the second 1 based on
x-appengine-cronheader (same in standard environment):
requests cron service contain http header:
x-appengine-cron: truethe
x-appengine-cronheader set internally google app engine. if request handler finds header can trust request cron request. if header present in external user request app, stripped, except requests logged in administrators of application, allowed set header testing purposes.
but in removed headers mentioned that:
in addition, selected headers match following pattern removed request:
x-appengine-*
it's unclear if extends x-appengine-cron or not. it's worth try. check in (standard env, webapp2-based) cron handler code:
if self.request.headers.get('x-appengine-cron') none: self.abort(403) # httpforbidden
Comments
Post a Comment