4

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

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

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

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

4

4 回答 4

3

对于 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))
于 2013-05-09T12:15:40.573 回答
2

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

于 2013-05-09T12:08:26.873 回答
0

不,您可以使用 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']);
   }
于 2013-05-09T12:15:34.323 回答
0

我建议使用 Ruby/ROR 的delayed_job,更多信息在这里

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

于 2013-05-09T12:18:09.017 回答