Избранное | Русский | Войти

Задачи, запланированные с помощью Cron для Java

Служба Cron App Engine позволяет запланировать задачи, регулярно выполняемые в определенное время или через определенные временные интервалы. Эта задачи известны как задачи Cron. Они автоматически запускаются службой Cron App Engine. Например, ее можно использовать, чтобы ежедневно отправлять отчеты по электронной почте, обновлять данные кэша каждые 10 минут или какую-либо сводную информацию каждый час.

Задача Cron вызывает URL в заданное время. URL-адреса, вызываемые службой Cron, подпадают под те же ограничения и квоты, что и обычные HTTP-запросы, включая ограничение на время запроса.

Для приложения можно запланировать до 20 задач.

О файле cron.yaml

Файл cron.xml, хранящийся в каталоге WEB-INF приложения (вместе с файлом appengine-web.xml) позволяет управлять задачами Cron для приложения Java. Вот пример файла cron.xml:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday of month 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>

Определение схемы XSD можно посмотреть в файле docs/cron.xsd SDK.

Файл cron.xml состоит из ряда определений задач. Определение задачи включает URL (<url>) и расписание (<schedule>). Дополнительно можно указать описание (<description>) и часовой пояс (<timezone>). Описание будет доступно в консоли администрирования.

В поле url указывается URL приложения. Формат поля schedule более подробно рассмотрен в статье Формат расписания.

Часовой пояс нужно указывать в виде стандартного названия часового пояса zoneinfo. Если часовой пояс не указан, задачи выполняются по времени UTC (также известном как GMT).

Формат расписания

Расписание задач Cron задается в простом формате на английском языке.

Вот примеры расписаний:

every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday of month 09:00
1st monday of sep,oct,nov 17:00

Если повторяющуюся задачу нужно выполнять не в определенное время, а через регулярные интервалы, используйте форму every N (hours|mins|minutes), где N – количество часов или минут, которое задает интервал. Минимальный временной интервал между запуском задач составляет одну минуту.

Более определенное расписание можно задать следующим образом:

("every"|ordinal) (days) "of" (monthspec) (time)

Скобки используется только в иллюстративных целях. Кавычки обозначают литерал.

Где:

  • ordinal – список, разделенный запятыми: "1st" или "first" (первый) и т. д. Допустимы обе формы.
  • days – cписок дней недели, разделенный запятыми (например, "mon" (пн), "tuesday" (вторник), допустимы сокращенная и полная формы).
  • monthspec – список названий месяцев, разделенных запятыми (например, "jan" (янв), "march" (март), "sep" (сен)).
  • time – время дня в 24-часовом формате ЧЧ:ММ.

Безопасные URL-адреса для службы Cron

Пользователям можно запретить доступ к URL-адресам запланированных задач, предоставив к ним доступ только аккаунтам администраторов. Запланированные задачи могут получить доступ только к URL для администраторов. Ограничение доступа к URL описано в разделе Безопасность и аутентификация. Пример части файла web.xml, в которой доступ ко всем URL, начинающимся с /cron/, разрешен только администраторам:

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

Формат файла web.xml описан в документации по дескриптору развертывания.

Чтобы проверить задачу Cron, выполните вход с правами администратора и в браузере перейдите по URL обработчика.

Запросы из службы Cron содержат HTTP-заголовок:

X-AppEngine-Cron: true

Его следует проверить, чтобы убедиться, что только запросы из службы Cron могут вызвать этот обработчик.

Добавление задач Cron

Чтобы добавить задачи Cron, можно использовать AppCfg. При добавлении приложения в App Engine с помощью AppCfg update, служба Cron обновляется вместе с содержанием файла cron.xml. Можно лишь обновить конфигурацию службы Cron без загрузки оставшейся части приложения с помощью команды AppCfg update_cron.

Чтобы удалить все задачи Cron, оставьте в файле cron.xml только:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>

Поддержка службы Cron в Консоли администрирования

В Консоли администрирования можно просматривать состояние задач Cron. Чтобы узнать их состояние, в том числе время последнего выполнения задачи и ее результат, нажмите на ссылку "Задачи Cron" в боковом меню.

Чтобы просмотреть добавленные или удаленные задачи, нажмите на ссылку "Журналы администрирования" в меню Консоли администрирования.

Поддержка службы Cron на сервере разработки

appserver разработки не выполняет задачи Cron автоматически. Можно использовать интерфейс запланированных задач или задач Cron настольного компьютера, чтобы вызвать URL задач с помощью инструмента curl или аналогичного ему.