【问题标题】:Scheduler not running Laravel 5调度程序未运行 Laravel 5
【发布时间】:2019-02-10 14:02:48
【问题描述】:

我正在尝试运行一个调度程序,它每分钟获取比特币价格并将它们添加到数据库中,但我无法让 larval 调度程序正常运行。

我已经在一个单独的 php 页面中测试了 sql 代码,它可以工作,但调度程序似乎没有运行

调度函数在 kernel.php 处理函数在 Jobs/UpdateRates 中

protected function schedule(Schedule $schedule)
{
    $schedule->job(new \App\Jobs\UpdateRates)->everyMinute();

}


public function handle()
{
    $url = "https://bitpay.com/api/rates";
    $json = file_get_contents($url);
    $data = json_decode($json, TRUE);
    $rate = $data[1]["rate"];    
    $usd_price = 10;     # Let cost of elephant be 10$
    $bitcoin_price = round( $usd_price / $rate , 8 );

    DB::insert('insert into settings (bitcoin_rate, monero_rate) values (?, ?)', [0, 1]);
}

【问题讨论】:

  • 没有调度程序的作业的输出是什么,我的意思是如果你使用php artisan tinker 运行它,它可以工作吗?
  • 使用tinker运行后,是否在数据库中插入任何记录?
  • 这可能是一个愚蠢的问题,但是您有什么触发您的计划任务?
  • 你添加了cron作业吗?
  • 不要破坏你的帖子。

标签: laravel laravel-5 laravel-4


【解决方案1】:

你需要添加到cron:

vim /etc/crontab

修复path-to-your-project,添加这一行

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这就是所谓的 Laravel,然后你可以在 Laravel 项目中完成剩下的日程安排。

现在您可以像这样添加任务,而不必担心再次更新 cron。

protected function schedule(Schedule $schedule)
{
    $schedule->job(new DailyEmailReports)->dailyAt();
    $schedule->job(new SomeOtherThing)->hourly();
    $schedule->job(new SomeElse)->everyFiveMinutes();     
}

【讨论】:

  • 非常感谢,我不明白“->everyMinute();”的意义何在如果我不得不使用 cron,请加入 kernel.php
  • 好了,现在你可以添加越来越多的 $schedule->command(SomeCommand::class)->daily(); $schedule->command(OtherCommand::class)->everyFiveMinutes();
  • @JohnPooder 这样做更有意义吗?
  • 不,我不明白你在说什么
  • 基本上 cron 是您的服务器每 xxx 次(秒、分钟等)执行一次操作的方式。您添加到 cron 的行正在运行 php artisan schedule:run, etc, etc... 每毫秒左右,我相信现在在您的 Laravel 项目中,您可以设置任务并每分钟运行一次,小时等...只需添加另一个: $schedule->job(new SomeNewTask)->everyFiveMinutes();并且不必在 cron 中添加另一行。这样更有意义吗?
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 2019-01-01
  • 2018-04-16
  • 1970-01-01
  • 2021-10-17
  • 2013-07-01
相关资源
最近更新 更多