Check if Task Scheduling works on local, Laravel - laravel

I am using Task Scheduling from Laravel, on local env. and till now I test it with php artisan word:weeklyUpdate , but I want to check if the Cron Job run automatically on a specific date, like in my code.
protected function schedule(Schedule $schedule)
{
$scheduler = new LkpSchedulerUpdateDate;
$scheduler = $scheduler->first()->toArray();
$schedule->command('word:weeklyUpdate')->weeklyOn($scheduler->date, $scheduler->time);
//ex: weeklyOn(3, 05:49:00)
}

Create a schedule that runs just some minuts after the current time (let's say 5 minuts from now), wait, then check the results.
Edit:
It's because when you run php artisan word:weeklyUpdate` you execute the command directly.
The scheduled task your wrote is equivalent to execute php artisan word:weeklyUpdate in console every week.
Also, in your locale did you activated the cronJob scheduler?
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Related

Laravel Scheduler not working in Dreamhost VPS

Laravel scheduler doesn't work in Dreamhost VPS.
Dreamhost has a limitation of not allowing every minute calls so I am doing it in a 10 minute call instead. However, the scheduler doesn't fire in any case.
I have tried the following cron commands:
php ~/site.com/artisan schedule:run >> /dev/null 2>&1
and
cd / site.com && php artisan schedule:run >> /dev/null 2>&1
But both do not work.
Here's what I have inside my kernel.php
protected $commands = [
'App\Console\Commands\DailyStatus',
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('status:daily')
->timezone('Asia/Manila')
->dailyAt('6:50');
$schedule->command('status:daily')
->timezone('Asia/Manila')
->daily()
->between('12:00','12:30')
->appendOutputTo(public_path().'status_daily_output.log')
->withoutOverlapping(60);
$schedule->command('status:daily')
->timezone('Asia/Manila')
->dailyAt('12:15')
->appendOutputTo(public_path().'status_daily_at_output.log')
->withoutOverlapping(60);
}
The logs are also not being generated. I have put some echo commands and its not firing.
How can I test if my scheduler is properly configured?
Can someone help me fix my current setting?
Thank you.
So I managed to get this to work after a number of testing.
Make sure that your account can execute the command
crontab -e
If you can't, contact Dreamhost support to have the permissions fixed.
For your cron command, you need to specify the exact location of your php
cd ~/site.com && /usr/local/php72/bin/php artisan schedule:run >> /dev/null 2>&1
Since everyminute is not allowed by Dreamhost, I suggest executing it at every 10 minutes instead.
I hope this helps!

Laravel command setup into digitalocean cron job but not working

In my laravel application under routes/console.php have one command. I want to run this command every minute which is given below:
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');
In digital ocean crontab i registered below command but not working.
* * * * * cd /var/www/html/laravel_projects/user_profile/ && php artisan schedule:run 1>> /dev/null 2>&1
N.B: In digitalocean cron status showing it's active and if i run this command under project directory manually & its' working.
You need to define a schedule to tell Laravel which commands you want to run.
Your task schedule is defined in the app/Console/Kernel.php file's schedule method.
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->daily(); // or some other time
}
https://laravel.com/docs/5.8/scheduling#defining-schedules
Add task schedule inside App\Console\Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('reminders:send')->everyMinute();
}
I hope it helps.
sudo service cron restart
execute this command to restart cronjob service

Laravel task scheduler permission problem with cleanDirectory command

I've set up a console command with a handle() function like this:
public function handle()
{
$fileSystem = new Filesystem;
$fileSystem->cleanDirectory('storage/app/public/tmp');
}
And in the console kernel I set up the command:
$schedule->command('cleanupfiles:tmp')
->everyMinute()
->sendOutputTo(storage_path('logs/taskoutput.log'));
The superuser's crontab has the following entry:
* * * * * php /var/www/website/artisan schedule:run >> /dev/null 2>&1
I can see the task scheduler getting executed every minute by looking at the /var/log/syslog, so cron does it's job, but the folder contents are not cleaned. When I run the task directly on the terminal by: php artisan schedule:run I have the same effect; no files are deleted. Finally when I run the schedule with sudo php artisan schedule:run I see it works, files get deleted and output is written to taskoutput.log.
How can I solve this so the task runs with necessary permissions? Or is there anything else I miss here? Thanks.

laravel 5.5 forge task scheduling cron job

With older versions of Laravel I only had to write a command in Forges controlpanel eg php /home/forge/default/artisan scheduled:run then set the interval and hit schedule button.
Now in Laravel 5.5 I can se that I can add jobs in the kernel.php file eg:
protected function schedule(Schedule $schedule)
{
$schedule->command('SomeJob:delete')
->daily();
}
Does this mean I no longer have to setup cron jobs in laravel Forge?
You still need one cron entry to start the scheduler:
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

How to setup Laravel 5's task scheduling in Heroku?

I'm trying to follow the Laravel Documentation on how to Run Cron Jobs,
and I want to add this
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
But I don't know how to add it to Heroku.
I created this Scheduler which runs once a minute and is part of your own app.
https://gist.github.com/robbydooo/65bf341ea0f4081150b945bfb1d38d3c
It creates a new Dyno type called Scheduler which you start one of.
Make sure you run jobs on your queue to avoid this scheduler over running once per minute.
To use this scheduler with Laravel 5.4+ add this file to /app/Console/Commands/RunScheduler.php
Register this file in app/Console/Kernel.php
protected $commands = [
…
Commands\RunScheduler::class
…
]
Add this line to your Procfile:
scheduler: php -d memory_limit=512M artisan schedule:cron
Heroku has a cron scheduler addon that you can use for scheduled tasks.
You can install it like this:
$ heroku addons:create scheduler:standard
Have a look at this article for more information.
It's been a while since this question was asked but recently I've had a similar issue and was able to overcome it using this blog post:
https://dev.to/autoidle/run-laravel-scheduled-jobs-on-heroku-2ah6
You can basically create a console command using this artisan generator:
php artisan make:command SchedulerDaemon
then you can edit app/Console/Commands/SchedulerDaemon.php and edit some lines as described below:
...
class SchedulerDaemon extends Command
{
...
// Change $signature value
protected $signature = 'schedule:daemon {--sleep=60}';
...
// Change $description value
protected $description = 'Triggers scheduler every minute or --sleep seconds interval';
...
public function handle()
{
// Change handle() function body to this:
while (true) {
$this->info('Calling scheduler');
$this->call('schedule:run');
sleep($this->option('sleep'));
}
}
...
}
Then, add this line to Procfile:
scheduler: php artisan schedule:daemon
And remember to enable scheduler process on heroku dashboard or run:
heroku ps:scale scheduler=1
I hope it becomes helpful to others in the future!
Cron To Go is an add-on that allows you to run Laravel's task scheduler every minute (* * * * * in cron). Simply install the add-on, add a job with * * * * * as the schedule and php artisan schedule:run as the command, sit back and relax! If your Laravel logs don't show up for the scheduler, there's a quick fix for log routing described here.
A free alternative can be to use the free worker dyno and configure it as follows in the Procfile
web: vendor/bin/heroku-php-apache2 public/
worker: bash -c "while [ true ]; do (php artisan schedule:run &); sleep 60; done"
This command creates a while loop for run schedule:run every minute.
Then you must exec heroku ps:scale web=1 worker=1 to enable worker dyno.

Resources