【问题标题】:Is Cron the only method to run scheduled tasks?Cron 是运行计划任务的唯一方法吗?
【发布时间】:2013-05-03 21:35:46
【问题描述】:

cron(或其派生类)是运行计划编程任务的唯一方法吗?例如:

  1. 在 X 前 3 天向客户的信用卡收费
  2. 从时间 x 6 小时后发送电子邮件
  3. 每小时执行一次 xyz 命令

是否有任何好的资源/书籍来教如何以干净的方式实现这些功能(python、ruby(或 ROR)、python)?

我目前的肮脏方法是让 CronTab 中的包装脚本每分钟运行一次,以检查是否应该运行某些任务。我真的不喜欢这个。我更喜欢一种可以以编程方式实现计划任务的方法。

【问题讨论】:

标签: php python ruby-on-rails ruby django


【解决方案1】:

对于python,您可以使用celery

例如,每小时执行一次命令将如下所示:

from celery.task.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(hour=3))
def every_three_hour():
    print("This runs every three hour")

从现在开始执行三个小时后会:

from datetime import datetime

YourTask.apply_async(args=[some, args, here], eta=datetime.now()+datetime.timedelta(hours=3))

【讨论】:

    【解决方案2】:

    如果您想在未来的特定时间安排一次性作业,at 可能更合适。

    【讨论】:

      【解决方案3】:

      不,你可以使用 linux 设置计划作业,就像我们所做的那样

      if (strtoupper(substr(php_uname(), 0, 3)) === 'WIN') {
             // This is for Windows
             $cmd = PHP_PATH . " " . PATH_CLASS . "/Cron/somecron.php";
             pclose(popen("start /B ". $cmd, "r"));
             unset($_SESSION['something']);
         } else {
            //This is for Linux
            exec("php " . PATH_CLASS . "/Cron/somecron.php > /dev/null &");
            unset($_SESSION['something']);
         }
      

      【讨论】:

        【解决方案4】:

        我建议使用 Ruby/ROR 的 delayed_job,更多信息 here

        非常容易设置,也是最重要的活跃项目,这是我所知道的大多数 Rubiest 的首选武器 :)

        【讨论】:

          猜你喜欢
          • 2019-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 2012-05-27
          • 2023-03-30
          • 1970-01-01
          • 2020-12-02
          相关资源
          最近更新 更多