Google App Engine для псевдо-cronjobs?

Я ищу возможность создавать псевдо-cronjobs, так как я не могу использовать настоящие вакансии в UNIX.

Поскольку скрипты Python могут работать неограниченное время, я подумал, что Python будет отличным решением.

В Google App Engine вы можете настроить скрипты Python, и это бесплатно. Поэтому мне следует использовать App Engine.

App Engine допускает 160 000 обращений к внешним URL-адресам (верно?), Поэтому у вас должно быть 160000/31/24/60 = 3,6 обращений в минуту.

Итак, мой сценарий был бы таким:

import time
import urllib
while time.clock() < 86400:
    # execute pseudo-cronjob file and then wait 60 seconds
    content = urllib.urlopen('http://www.example.org/cronjob_file.php').read()
    time.sleep(60)

К сожалению, у меня нет возможности протестировать сценарий, поэтому мои вопросы: 1) Как вы думаете, это сработает? 2) Разрешено ли (Google TOS) использовать сервис для такой деятельности? 3) Правильно ли я рассчитываю количество обращений к URL в минуту?

Заранее спасибо!


person caw    schedule 16.04.2009    source источник
comment
Задания Cron в AppEngine ограничены лимитом времени запроса, который составляет 30 секунд, поэтому он не может выполняться «в течение неограниченного периода».   -  person dar    schedule 16.04.2009
comment
Извините, что вы конкретно имеете в виду? Я думаю, что сам Python не имеет ограничений по времени, не так ли? Единственное ограничение по времени запроса - в браузере клиента. Но если вы запустите файл cronjobs, клиента нет. Или у Google App Engine есть собственное ограничение по времени запроса, чтобы скрипты не выполнялись слишком долго?   -  person caw    schedule 16.04.2009
comment
На самом деле, ограничение по времени накладывается на сервер, так что да, это позволяет избежать слишком много времени для скриптов.   -  person fuentesjr    schedule 17.04.2009
comment
Возможно, вам стоит взглянуть на страницу квот: code.google.com/appengine/docs /quotas.html. Да - в GAE есть ограничение на количество запросов, чтобы скрипты не выполнялись слишком долго. В настоящее время это 30 секунд.   -  person dar    schedule 17.04.2009
comment
Спасибо. Я думаю, что с такими ограничениями GAE не очень полезен для запуска скриптов. Но я могу использовать GAE для запуска скриптов в моем веб-пространстве.   -  person caw    schedule 17.04.2009


Ответы (5)


Возможно, я вас неправильно понимаю, но файлы конфигурации cron позволят вам это сделать (без Python). Вы можете добавить в файл cron.yaml что-то вроде этого:

cron:
- description: job that runs every minute
  url: /cronjobs/job1
  schedule: every minute

Дополнительную информацию о планировании см. В документации Google.

person Jason Coon    schedule 16.04.2009
comment
Нет, вы меня правильно поняли. Я не знал, что сейчас есть cron job service. Но я не могу добавить внешние URL-адреса в службу заданий cron, не так ли? Поэтому я все еще должен использовать скрипт Python, который вызывает внешний файл. Правильно? - person caw; 16.04.2009

У Google есть некоторые ограничения на время выполнения задачи.

Вызовы URLFetch, выполняемые в SDK, теперь имеют тайм-аут 5 секунд, здесь

Они позволяют запланировать до 20 задач cron в любой день. Здесь

person user91821    schedule 16.04.2009
comment
Спасибо, поэтому он не очень подходит для создания псевдо-cron-заданий. - person caw; 17.04.2009

Дублируйте, см. задания cron в google appengine

Задания Cron теперь официально поддерживаются в GAE: http://code.google.com/appengine/docs/python/config/cron.html.

person Community    schedule 16.04.2009
comment
Я не знаю. Может потому, что coonj ответил на этот вопрос раньше !? Я не голосующий против. - person caw; 16.04.2009

Вы можете уточнить, каким образом вы хотите это сделать

Вы хотите использовать appengine для ЗАПУСКА задания? Т.е. задание выполняется на сервере гугла?

or

Вы хотите использовать свой СОБСТВЕННЫЙ код на своем сервере и запускать его с помощью движка приложений Google?

Если первое: теперь Google делает cron. Используйте это :)

Если последнее: вы можете использовать cron Google для запуска своего собственного, даже если это косвенно (например, google-cron вызывает google-app-engine, который вызывает ваше-приложение).

Если вы можете, разверните поток для выполнения этой работы, чтобы ваша страница немедленно вернулась. Не забывайте: если вы вызываете http://whatever/mypage.php, и ваш браузер умирает (или в этом случае, Google убивает ваш процесс из-за того, что он работает слишком долго), скрипт php обычно все еще работает до конца - вывод просто никуда не денется.

В противном случае попробуйте развернуть поток (не уверен, что вы можете сделать это в PHP, хотя - я парень C #, новичок в PHP)

А если ничего не помогает: получите лучший хостинг! Я плачу около 6 долларов в месяц за dreamhost.com и могу запускать cron на их серверах - это включено. Они занимаются PHP, Rails и др. Вы можете даже пинговать меня, чтобы получить код скидки :) (просмотреть профиль на веб-сайте и т. Д.)

person Nic Wise    schedule 16.04.2009
comment
Большое тебе спасибо! Я хочу, чтобы он работал вторым способом, который вы упомянули. Он должен просто запустить скрипт на моем внешнем веб-сайте. Но могу ли я использовать Google App Engine только для запуска моих заданий cron (Условия использования)? - person caw; 17.04.2009
comment
Я не так внимательно читал TOS, но не понимаю, почему. Это просто URL-вызов, что, я думаю, вам разрешено. - person Nic Wise; 19.04.2009

Делайте то, что сказал Ник Уайз, или также передайте cronjob на аутсорсинг, используя такую ​​службу, как www.guardiano.pm, чтобы вы действительно могли позвонить на www.yoursite.com/myjob.php, и каждый раз, когда вы вызываете этот url-адрес, что-то, что вы хотите, будет выполнено.

Ps бесплатно Pss - мой любимый проект, он находится в стадии бета-тестирования

person Lorenzo Sinisi    schedule 12.06.2015