I need to learn how to work with cron jobs in Laravel..As I can see the documentation does not specify this part.I have found a tutorial but it is about Laravel-3. Can you give me some advice on how to schedule a cron job running once a day..?Is there any tutorial about that issue?
My code so far is the following :
JobDaemon.php :
<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class JobDaemon extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'job-daemon';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get all recent jobs once a day.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
$this->info('fired');
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
//array('example', InputArgument::REQUIRED, 'An example argument.'),
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
//array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
I used the following command to set it up
php artisan command:make JobDaemon
And my artisan file is the following:
<?php
Artisan::add(new JobDaemon);
I get the following from my console...
johnnemo@johnnemo:/opt/lampp/htdocs/e-support-uop$ tail -f /var/log/syslog | grep -i cron
Jan 1 18:31:09 johnnemo crontab[4484]: (johnnemo) REPLACE (johnnemo)
Jan 1 18:31:09 johnnemo crontab[4484]: (johnnemo) END EDIT (johnnemo)
Jan 1 18:35:01 johnnemo CRON[5054]: (johnnemo) CMD (php /opt/lampp/htdocs/e-support-uop/artisan job-daemon)
Jan 1 18:35:02 johnnemo CRON[5053]: (CRON) info (No MTA installed, discarding output)
Jan 1 18:39:01 johnnemo CRON[5064]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime))
Jan 1 18:40:01 johnnemo CRON[5076]: (johnnemo) CMD (php /opt/lampp/htdocs/e-support-uop/artisan job-daemon)
Jan 1 18:40:01 johnnemo CRON[5075]: (CRON) info (No MTA installed, discarding output)
First you need to make sure your new command is up, so if you run
php artisan list
'job-daemon' must be in the list of commands
Then you test it:
php artisan job-daemon
Does it work? Cool, now you can set an editor of your own:
export EDITOR=nano
Open the crontab with it:
[sudo] crontab -e
Execute type to the the correct path for your php:
type php
And you should get something like
php is hashed (/opt/lampp/bin/php)
So your php executable is at
/opt/lampp/bin/php
This will open and editor with the current cron jobs, sudo is optional to open the root crontab, just add a line with yours:
25 10 * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon
This will run your command everyday at 10:25AM.
To execute it every 5 minutes you do
*/5 * * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon
Then you tail
the syslog to see it running:
tail -f /var/log/syslog | grep -i cron
And you should see something like
Jan 1 10:25:01 server CRON[19451]: (root) CMD (php /var/www/<siteName>/artisan job-daemon)
In your command you cann't really print things on the screen, you won't see them printing, so to test you have to, for instance, save something to a file:
public function fire()
{
File::append('/tmp/laravel.txt', "fired\n");
Log::info('fired');
}
And then
tail -f /tmp/laravel.txt
To see the results in realtime.