我可以创建一个没有安排的cron作业

时间:2016-07-25 12:08:03

标签: java google-app-engine cron

我想设置一个只能通过app-engine ui触发运行的cron作业(按app-engine上的按钮)

如何将cron.xml设置为不包含调度?

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/match</url>
        <description>find buddies to all users</description>
        <schedule>----?-----</schedule>
    </cron>
</cronentries>

3 个答案:

答案 0 :(得分:1)

似乎你真正需要的是Task Queues,它们是设计用于处理主请求线程的任务。它们在后台实例上工作,因此它们被赋予与cron执行相同的限制(10分钟限制等)

调试PaaS总是很混乱,Google整合了Stackdriver debugger,但我并不清楚你想要实现的目标。

答案 1 :(得分:0)

AFAIK这是不可能的。

我看到2个可能的替代方案,基于GUI控制的标志,指示&#34; cron&#34;工作应该运行与否:

  • 有一个普通的cron,只需检查标志是否已设置:如果已设置则执行作业,如果不是
  • 则立即退出

,或者

  • 使用the deferred library:设置标志时还会触发延迟任务,除了执行作业外,只要设置了标志,该任务也会保持触发;延迟库还允许以亚秒间隔重复任务,这对于常规cron是不可能的(如果您感兴趣的话)。

<强>更新

延迟库至少有一个缺点:无法访问延迟函数内的请求处理程序。但延迟功能也可以在Task Queues中找到(由@ jirungaray提供答案) - 使用taskqueue.add()的可选countdowneta个参数:

  
      
  • 倒计时 - 此任务应运行或租用的未来秒数。默认为零。如果,请不要指定此参数   你指定了一个eta。

  •   
  • eta - 一个datetime.datetime,指定任务运行的绝对最早时间。如果,则无法指定此参数   指定了倒计时参数。这个论点可以是时间   区域感知或时区天真,或设置为过去的时间。如果   参数设置为None,默认值为now。对于拉动任务,没有   工人可以在eta指示的时间之前租用任务   参数。

  •   

这使得任务队列优于延迟库。

答案 2 :(得分:-1)

cron作业只是在给定时间调用您的处理程序。如果您不想安排,只需在浏览器窗口中键入您的处理程序,然后按Enter键,例如:

https://my-app.appspot.com/generate_report

结果与在控制台中按“立即运行”按钮相同。

如果需要,您还可以使用代码在执行之前检查的一些令牌来保护此处理程序。