标签: laravel-scheduler

Laravel运行多个计划任务

我目前有一个计划的控制台命令,每5分钟运行一次,没有重叠,如下所示:

 $schedule->command('crawler')
             ->everyFiveMinutes()
             ->withoutOverlapping()
             ->sendOutputTo('../_laravel/storage/logs/scheduler-log.txt');
Run Code Online (Sandbox Code Playgroud)

所以它工作得很好,但是我目前有大约220个页面需要大约3个小时才能以5分钟的增量完成,因为我只是强迫它在每个时间间隔抓取10个页面,因为每个页面由于各种各样需要20-30秒来爬行因素.每个页面都是数据库中的记录.如果我最终要抓取10,000个页面,则此方法不起作用,因为它需要超过24小时,并且每个页面应该每天重新抓取一次.

因此,我的供应商最多允许10个并发请求(或更高的计划),那么同时运行它的最佳方式是什么?如果我只是复制调度程序代码,它是否会运行相同的命令两次或者如果我重复它10次运行10次?任何会导致的问题?

然后我需要将参数传递给控制台,如1,2,3等...我可以用它来确定要爬行的页面?即1将是1-10个记录,2个将是接下来的11-20个记录,依此类推.

使用这个StackOverfow答案,我想我知道如何传递它,像这样:

 $schedule->command('crawler --sequence=1')
Run Code Online (Sandbox Code Playgroud)

但是如何在Command班级中阅读该参数?它只是成为一个常规的PHP变量,即$sequence

php laravel laravel-5 laravel-scheduler

10
推荐指数
1
解决办法
4041
查看次数

Laravel 时间表 - 每小时、每天 - 了解确切的开始时间

Laravel文档中的示例:

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        DB::table('recent_users')->delete();
    })->daily();
}
Run Code Online (Sandbox Code Playgroud)

注意每日 功能。

我不明白,它如何知道什么时候开始?它总是在午夜或随机浮动时间开始吗?

我尝试阅读源代码:

/**
 * Schedule the event to run daily.
 *
 * @return $this
 */
public function daily()
{
    return $this->spliceIntoPosition(1, 0)
                ->spliceIntoPosition(2, 0);
}
Run Code Online (Sandbox Code Playgroud)

所以我检查了 spliceIntoPosition 函数:

    /**
 * Splice the given value into the given position of the expression.
 *
 * @param  int  $position
 * @param  string  $value
 * @return $this
 */
protected function spliceIntoPosition($position, $value)
{
    $segments = explode(' ', …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5 laravel-scheduler laravel-5.5

6
推荐指数
1
解决办法
1万
查看次数

laravel什么时候执行Annual()函数

laravel什么时候执行任务调度的Annual()函数?是从第一次使用开始还是每年01.01.YYYY?

我检查了laravel文档和几页,但找不到该问题的答案。

$schedule->call(function () {
  DB::table("invoice_settings")
    ->where("key", "invoice_number")
    ->update(["value" => 860001]);
  })->yearly();
Run Code Online (Sandbox Code Playgroud)

我希望它在01.01.YYYY上运行。

scheduling laravel laravel-scheduler

6
推荐指数
1
解决办法
107
查看次数

Laravel调度程序时区

如何将Laravel调度程序设置为在特定时区的特定时间运行任务?服务器设置为UTC,但我想在Pacific/Auckland时区每周一中午12点运行任务.

例如,这将有效,但时区是UTC:

protected function schedule(Schedule $schedule) {
    $schedule->command('run-report')->weekly()->mondays()->at('12:00'));
}
Run Code Online (Sandbox Code Playgroud)

php scheduler laravel laravel-5 laravel-scheduler

5
推荐指数
1
解决办法
4338
查看次数

laravel 随机时间安排命令

我有一个奇怪的问题。我使用自定义命令通过 FB api 共享一些 url。

现在这个命令被安排到一个固定的 cron 配置,但我希望它是随机的,也许在时间范围之间。

我尝试在命令中使用随机睡眠函数,但出现了奇怪的行为。

有人已经不得不面对这个问题了吗?

random laravel laravel-scheduler

5
推荐指数
2
解决办法
2519
查看次数

Laravel 5 通过 AWS EC2 上的 cron 进行调度 - 命令未运行

问题:
我有一个 Laravel 5.4 artisan 任务,我需要通过 cron 运行它 - 尽管命令和调度程序(显然)设置正确,但它并没有完成。

这是 Laravel、php、apache、linux 或 crontab 的问题吗?最好的诊断方法是什么?


背景
在默认(亚马逊 AMI)EC2 实例上,artisan 命令被正确定义,并/var/www/html/myproject/在通过以下方式调用时从项目目录(即)完美运行:

php artisan mycommand:option1
Run Code Online (Sandbox Code Playgroud)

我已将此添加到如下所示的时间表中app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
    Log::info('schedule:run');
    $schedule   ->command('mycommand:option1')
                        ->dailyAt('07:00')
                        ->emailOutputTo('email@email.com');

    $schedule   ->command('mycommand:option2')
                        ->dailyAt('07:15')
                        ->emailOutputTo('email@email.com');
}
Run Code Online (Sandbox Code Playgroud)

apachevia添加了以下 cron 命令sudo crontab -u apache -e

* * * * * php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

为了确保这不是权限问题,我还为以下用户添加了相同的命令:

  • ec2-user 通过 crontab -e
  • root 通过 sudo crontab -e

系统输出

来自sudo tail -f …

php cron laravel laravel-5 laravel-scheduler

5
推荐指数
1
解决办法
4293
查看次数

AWS 上的 Laravel 调度任务不起作用

我正在将我的 Laravel 应用程序部署到 ElasticBeanstalk 环境。我正在尝试在服务器上的调度任务中运行命令。但它不起作用。这就是我所做的。

我在 Kernel.php 文件中安排我的命令如下。

$schedule->command('counter:update')->everyMinute()->onOneServer();
Run Code Online (Sandbox Code Playgroud)

我使用 Redis 作为我的缓存驱动程序并且它正在工作。

然后我尝试了两种不同的方法。

第一种方法:使用 Laravel AWS Worker 包https ://packagist.org/packages/dusterio/laravel-aws-worker

我按照文档中提到的说明安装了该软件包。

然后我将 CSRF 中间件中文档中提到的工作路由列入白名单。

然后我在项目的根文件夹中创建了一个 cron.yml 文件,其中包含以下内容。

version: 1
cron:
  - name: "schedule"
    url: "/worker/schedule"
    schedule: "* * * * *"
Run Code Online (Sandbox Code Playgroud)

然后我部署了我的应用程序。但是调度任务不起作用。所以我尝试了第二种方法如下。

第二种方法:使用 Crontab

我创建了一个包含以下内容的 .ebextensions/cronjob.config 文件。

files:
    "/etc/cron.d/schedule_run":
        mode: "000644"
        owner: root
        group: root
        content: |
            * * * * * root . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1

commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/*.bak"
Run Code Online (Sandbox Code Playgroud)

然后我部署了我的应用程序。第二种方法也行不通。我的配置中缺少什么以及如何使其正常工作? …

cron amazon-web-services laravel amazon-elastic-beanstalk laravel-scheduler

4
推荐指数
1
解决办法
783
查看次数

Laravel 5 运行队列:按 Laravel 计划工作

我有一个这样的时间表:

<?php

namespace App\Console;

use Illuminate\Support\Facades\Artisan;
use Illuminate\Console\Scheduling\Schedule;
protected function schedule(Schedule $schedule)
{
   Artisan::call('queue:work');
}
Run Code Online (Sandbox Code Playgroud)

我在我的 cronjob 上添加了这个:

* * * * * cd /var/www/html/my_script_address && php artisan schedule:run

它是正确的代码吗?我在问,因为每一分钟都在奔跑Artisan::call('queue:work')

这是最好的方法吗?

php laravel laravel-5 laravel-queue laravel-scheduler

3
推荐指数
1
解决办法
1万
查看次数

如何使用 Laravel 任务调度将参数传递给命令

作为官方文档,它没有太多提及这一点。 App\Console\Commands\PullUsersCommand.php有一个像这样的签名:

protected $signature = 'pull:users {startTime} {endTime} {minutes=10} {--flag} {--star=}';
Run Code Online (Sandbox Code Playgroud)

那么,如何将参数传递给它App\Console\Kernel.php

laravel laravel-scheduler laravel-artisan

3
推荐指数
1
解决办法
6463
查看次数

Laravel 5 schedule job every 30 seconds

I am using Laravel schedule to run cron jobs.

In my crontab I have added (with correct path to my project):

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

Now my App\Console\Kernel.php looks like:

protected function schedule(Schedule $schedule)
{
        $schedule->command('investments:calculate_interests')->everyMinute();
        $schedule->call('\App\Http\Controllers\UsersController@testEvent')->everyMinute();
}
Run Code Online (Sandbox Code Playgroud)

Using it like that I successfully run jobs every minute. But how I can change it to run them on every 10 or 20 or 30 seconds?

scheduled-tasks laravel laravel-5 laravel-scheduler

2
推荐指数
1
解决办法
1万
查看次数

Laravel Scheduler:我应该使用作业还是命令?

我不知道是否要在调度程序中安排作业或命令。我真的找不到任何深入的数据来说明为什么我会选择其中之一。通常,我会考虑给定的计划任务将运行多长时间,如果它“长”,那么我将创建一个作业,但最近我将一些作业切换到命令,因为我可以手动运行它们。

另外,如果我在调度程序中使用命令并且我正在使用runInBackground()它与作业有何不同?

laravel laravel-scheduler

2
推荐指数
1
解决办法
1497
查看次数

在Plesk中运行Laravel 5.1 Task Scheduler

我已经在Plesk服务器上上传了我的laravel 5.1项目。我想在Plesk中运行任务计划程序,我已经在互联网上看到很多答案,但是似乎没有任何帮助。

我的Plesk任务计划界面

在此处输入图片说明

我正在像这样运行schedule:run命令

 php  /var/www/vhosts/websitename.com/httpdocs/artisan schedule:run 1
Run Code Online (Sandbox Code Playgroud)

在cron风格中,我要添加这个

 * * * * *
Run Code Online (Sandbox Code Playgroud)

这样我的cron每分钟运行一次

当我单击立即运行按钮时,出现错误

错误是此行工匠文件

 $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索,发现很多解决方案都说这是PHP版本问题,如果PHP版本小于或等于PHP v5.4,它将通过错误出现,但是我当前的php版本是5.6.30

我无法弄清楚到底是什么问题。感谢帮助

注意:我尚未在Kernel.php文件中添加任何代码

php cron plesk laravel-5 laravel-scheduler

1
推荐指数
2
解决办法
1761
查看次数

有没有办法从控制器获取计划任务作为数组?

我想从控制器获取计划任务列表。一些软件包文章甚至StackOverflow解释了如何通过命令显示它,但我没有找到如何在没有命令的情况下执行此操作。我的目标是获取一系列计划任务及其日期和描述。

有没有办法从控制器获取计划任务作为数组(或对象列表,或任何可以轻松处理的内容)?

php laravel laravel-scheduler

1
推荐指数
1
解决办法
1011
查看次数