在終端機terminal中執行自行編寫的laravel程式。
以前在寫CI的時候,有時候有些程式是為了排程寫的,在crontab中大概會長這樣
0 17 * * * /usr/bin/php /var/www/html/ci_web/index.php controllerName/functionName > /dev/null 2>&1
透過CI專案中的index.php來執行想執行的程式,但是到了laravel,這個方法就不行了。在看過laravel的文件和一番摸索後,才稍微知道了laravel 的artisan命令列的用法(我一直覺得LARAVEL的文件看起來像天書,明明寫了很多都我看起來大部分都一知半解)。
作法大約如下:
首先透過artisan產生一個command檔,作法就跟產生controller一樣。
php artisan make:command commandName
此時在 /app/Console/Commands 中就會產生一個 commandName.php 的檔案,內容為
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class commandName extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
}
最開頭的 protected $signature = 'command:name';
是替你的命令命名,在此例中,如果維持這樣,那麼只要在專案下執行
php artisan command:name
就會執行這隻程式,冒號的用意在於可以把同類型的命令整理在一起,透過 php artisan list 列出所有命令時會將有同樣開頭的命令整理在一起。
PS.這邊命令名稱可以跟檔名完全無關,要取名成 protected $signature = 'give:money'; 有沒關係,甚至沒有冒號也沒關係
第二段的protected $description = 'Command description'; 則是功能說明,會在 php artisan list 列出。
而最後的 handle() 則是程式主體,將希望執行的命令寫在此處即可,編寫完成後打開
app/Console/Kernel.php
然後加入內容
protected $commands = [
//
Commands\commandName::class
];
這樣子此命令就可以使用了。crontab設定方式如下
3 0 * * * /usr/bin/php /var/www/html/laravel_site/artisan command:name > /dev/null 2>&1
更多的說明可以參考laravel文件,例如傳入參數(執行排程時有時候需要不同的判斷),呼叫另外一隻command,等功能