Laravel task scheduler permission problem with cleanDirectory command - laravel-5

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.

Related

Check if Task Scheduling works on local, 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

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 scheduled job did not resume after maintance mode

I did a maintanace on my laravel app by php artisan down. Then again after 15 minutes I did php artisan up.
But the scheduled jobs have not still resumed. They are not being executed as it was before.
Schedueled jobs are not being executed even when I manually give the command. ex: php artisan my:command
I think by making logs of your cronjobs will help you.
First Method
remove this part from you cronjob
>> /dev/null
Now add log file path in you cronjob
* * * * * php /var/www/html/project/artisan schedule:run >> /var/www/html/project/mylog.log 2>&1
create a log file and this file 777 (writable) permission.
so you can check what actually happening
Second Method
Or you can use method appendOutputTo() in your kernal.php
$schedule->command('inspire')->everyMinute()->appendOutputTo($filePath);
$filePath is a path of a log file you can give a public path or storage path

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

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