ATXVISIONS
ATXVISIONS

Reputation: 27

laravel run command / cron every 7 seconds on sunday

So i would like to accomplish the a command which runs every sunday but also every 7 seconds on that sunday.

The following is from the docs but I don't have an idea on how to achieve this. Anyone able to direct me in the right direction?

protected function schedule(Schedule $schedule)
{
    $schedule->command('test:cron')
             ->everyMinute();
}

Upvotes: 0

Views: 2671

Answers (3)

Waad Mawlood
Waad Mawlood

Reputation: 888

In app/Console/Kernel.php

protected function schedule(Schedule $schedule)
{
    $schedule->command('test:cron')->cron('*/7 * * * 7')->runInBackground();
}

=> */7 => every 7 Seconds

=> * => every Hour

=> * => every day in the month

=> * => every month

=> 7 => day in week * every day 0-6 Sunday to Saturday 7 mean Sunday

Enable crontab in linux

crontab -e

will open file text to add this

* * * * * php /var/www/path of project/artisan schedule:run >> /dev/null 2>&1

Upvotes: 0

jascar_destin
jascar_destin

Reputation: 184

I believe you cannot achieve this via the scheduler API. However, you could run a custom command/job on sundays every minutes like this :

protected function schedule(Schedule $schedule)
{
    $schedule->job(new Job)
             ->sundays()
             ->everyMinutes();
}

Then in your job, call the CLI command you need to run, sleep for seven seconds and repeat this process for 1 minutes. Finally, make sure to take a look at the Laravel documentation about Jobs : https://laravel.com/docs/8.x/queues For instance, using symfony/process :

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Symfony\Component\Process\Process;

class RunCommand implements ShouldQueue, ShouldBeUnique
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct()
    {
        //
    }

    public function handle()
    {
        $process = new Process(['ls', '-lsa']);


        for ($i = 1; $i < 8; $i++) {
            // Run the command
            $process->run();

            // Pause the execution during 7 seconds
            sleep(7);
        }
    }
}

Upvotes: 3

cdruc
cdruc

Reputation: 637

This will run the command sunday every minute:

protected function schedule(Schedule $schedule)
{
    $schedule->command('test:cron')->cron('* * * * SUN');
}

Check it here

PS: I don't think you can use cron to go lower than "every minute".

Upvotes: 4

Related Questions