App Engine Cron 服务允许您对在指定时间执行或按指定间隔执行的定期计划任务进行配置。这些任务通常称为 cron job。这些 cron job 由 App Engine Cron 服务自动触发。例如,您可以使用此服务每日发出报告电子邮件,每 10 分钟更新一些缓存的数据,或者每小时更新一些概述信息。
cron job 将在一天中的某一指定时间调用网址。由 cron 调用的网址具有与普通的 HTTP 请求同样的限制和配额,其中包括请求时间限制。
一个应用程序最多有 20 个计划任务。
cron.xml 文件位于应用程序的 WEB-INF 目录中(与 appengine-web.xml 在一起),用于控制 Java 应用程序的 cron。以下是 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,请检查 SDK 中的 docs/cron.xsd 文件。
cron.xml 文件由若干作业定义组成。作业定义必须具有 <url> 和 <schedule>。您也可以视需要指定 <description> 和 <timezone>。此说明将显示在管理控制台中。
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 是一个数字,hours 或 minutes 指定了时间单位。运行任务的最小时间间隔可指定为 1 分钟。
如果您需要更具体的定时,可按如下方式指定计划:
("every"|ordinal) (days) "of" (monthspec) (time)
括号仅用于说明,而引号表示字面值。
其中:
您可以将计划任务使用的网址限制为只有管理员帐户才能访问,来防止用户访问。这样计划任务便可访问仅限管理员的网址。您可以在安全和验证中了解有关限制网址的内容。以下是在 web.xml 中将全部以 /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 job,请以管理员登录并在浏览器中访问处理程序的网址。
来自 Cron 服务的请求也将包含 HTTP 标头:
X-AppEngine-Cron: true
如果希望确保仅 cron 请求能够触发处理程序,您应该检查该标头。
您可以使用 AppCfg 上传 cron job。当您使用 AppCfg update 将应用程序上传到 App Engine 时,Cron 服务将根据 cron.xml 的内容进行更新。您可以使用 AppCfg update_cron 只更新 cron 配置,而无需上传应用程序的其余部分。
要删除所有 cron job,请将 cron.xml 文件更改为只包含以下内容:
<?xml version="1.0" encoding="UTF-8"?> <cronentries/>
您可以通过管理控制台查看 cron job 的状态。从侧边菜单中选择“Cron Jobs”链接,查看作业的状态,包括最后一次运行作业的时间以及作业的结果。
您也可以通过从管理控制台菜单中选择“管理日志”页来查看添加或删除 cron job 的时间。
开发应用程序服务器不会自动运行您的 cron job。您可以使用本地桌面的 cron 或计划任务接口通过 curl 或类似工具来触发作业的网址。