cron(或其衍生物)是运行计划编程任务的唯一方法吗?例如:
- 在 X 前 3 天从客户的信用卡中扣款
- 从时间 x 6 小时后发送电子邮件
- 每小时执行一次 xyz 命令
是否有任何好的资源/书籍来教如何以干净的方式实现这些功能(python、ruby(或 ROR)、python)?
我目前的肮脏方法是让 CronTab 中的包装脚本每分钟运行一次,以检查是否应该运行某些任务。我真的不喜欢这个。我更喜欢一种可以以编程方式实现计划任务的方法。
cron(或其衍生物)是运行计划编程任务的唯一方法吗?例如:
是否有任何好的资源/书籍来教如何以干净的方式实现这些功能(python、ruby(或 ROR)、python)?
我目前的肮脏方法是让 CronTab 中的包装脚本每分钟运行一次,以检查是否应该运行某些任务。我真的不喜欢这个。我更喜欢一种可以以编程方式实现计划任务的方法。
对于 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))
at
如果您想在未来的特定时间安排一次性作业,可能更合适。
不,您可以使用 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']);
}
我建议使用 Ruby/ROR 的delayed_job
,更多信息在这里。
非常容易设置,也是最重要的 - 活跃项目,这是我所知道的大多数 Rubiest 的首选武器 :)