博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel 5.1使用命令行模式(artisan)运行php脚本
阅读量:5878 次
发布时间:2019-06-19

本文共 2668 字,大约阅读时间需要 8 分钟。

 

 

Laravel有内置命令调度器,可以方便的实现Cron.

任务调度定义在app/Console/Kernel.php文件的schedule方法中,该方法已经包含了一个示例.Laravel里有两种方法执行Cron,第一种方法是让Cron每分钟调用Laravel命令调度,然后让Laravel来根据具体的命令来实现;需要在crontab里面加入如下内容:

1
* * * * * php 
/path/to/artisan 
schedule:run 1>> 
/dev/null 
2>&1

本文主要讲第二种方法,既Artisan控制台.Artisan是Laravel自带的命令行接口名称,它提供了很多有用的命令想要查看所有可用的Artisan命令,可使用list命令查看:

1
php artisan list

每个命令都可以用help指令显示命令描述及命令参数和选项。想要查看帮助界面,只需要在命令前加上help就可以了,例如:

1
php artisan help migrate

除了Artisan提供的命令之外,还可以构建自己的命令。可以将自定义命令存放在app/Console/Commands目录;当然,也可以自己选择存放位置,只要改命令可以基于composer.json被自动加载。

要创建一个新命令,可以使用Artisan命令make:console,比如我要创一个发送邮件的artisan命令,可以这样:

1
php artisan 
make
:console SendEmails

上述命令将会生成一个类app/Console/Commands/SendEmails.php,当创建命令时,--command选项可用于分配终端命令名(在终端调用命令时用):

1
php artisan 
make
:console SendEmails --
command
=emails:send

命令生成以后,需要填写该类的signaturedescription属性,这两个属性在调用list显示命令的时候会被用到。handle方法在命令执行时被调用,可以将所有命令逻辑都放在这个方法里面,我们可以在命令控制器的构造函数中注入任何依赖.这个SendEmails.php里面内容参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php 
namespace 
App\Console\Commands;
 
use 
Illuminate\Console\Command;
 
class 
SendEmails 
extends 
Command {
 
    
/**
     
* The console command name.
     
*
     
* @var string
     
*/
    
protected 
$name 
'emails:send'
;
 
    
/**
     
* The console command description.
     
*
     
* @var string
     
*/
    
protected 
$description 
'这是发邮件的命令.'
;
 
    
/**
     
* Create a new command instance.
     
*
     
* @return void
     
*/
    
public 
function 
__construct()
    
{
        
parent::__construct();
    
}
 
    
/**
     
* Execute the console command.
     
*
     
* @return mixed
     
*/
    
public 
function 
handle()
    
{
        
//TODO:发送邮件逻辑
    
}
 
}

$name是这个命令的名称,即artisan调用时的命令,如本例命令设为了emails:send,那么实际调用时要这么用:

1
php artisan emails:send

执行上面这条命令就是执行handle()方法,当然,这里还漏了一个非常重要的关键步骤,那就是需要把命令注入到app/Console/Kernel.php文件中,否则这个命令artisan是找不到的,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php 
namespace 
App\Console;
 
use 
Illuminate\Console\Scheduling\Schedule;
use 
Illuminate\Foundation\Console\Kernel 
as 
ConsoleKernel;
 
class 
Kernel 
extends 
ConsoleKernel {
 
    
/**
     
* The Artisan commands provided by your application.
     
*
     
* @var array
     
*/
    
protected 
$commands 
= [
        
'App\Console\Commands\Inspire'
,
        
'App\Console\Commands\SendEmails'
,
    
];
 
    
/**
     
* Define the application's command schedule.
     
*
     
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     
* @return void
     
*/
    
protected 
function 
schedule(Schedule 
$schedule
)
    
{
        
$schedule
->command(
'inspire'
)
                 
->hourly();
    
}
 
}

关键就是在$commands里面把要用到的SendEmails类放进去,好了,这样就可以通过artisan命令来执行脚本了.

由于artisan命令需要在Laravel的目录里面才能执行,所以实际要用crontab调用artisan命令时需要注意Crontab的shell代码要这样写,切记非常重要,否则是执行了不会运行实际处理逻辑的.

1
30 1 * * *    php 
/www/projects/laravelapp/artisan 
emails:send

上面/www/projects/laravelapp/是项目的路径

转载地址:http://gzcix.baihongyu.com/

你可能感兴趣的文章
.net中webconfig自定义配置
查看>>
【数据结构和算法16】堆排序
查看>>
PHP实现连接设备、通讯和发送命令的方法
查看>>
【HDOJ 5379】 Mahjong tree
查看>>
iOS UITableView表视图滚动隐藏UINavigationController导航栏
查看>>
SDL如何嵌入到QT中?!
查看>>
$(document).ready()
查看>>
RunLoop总结:RunLoop的应用场景(四)
查看>>
8个很实用的在线工具来提高你的Web设计和开发能力
查看>>
P1026 统计单词个数
查看>>
AndroidStudio EventBus报错解决方法its super classes have no public methods with the @Subscribe...
查看>>
MySQL主从同步那点事儿
查看>>
Python RGB 和HSV颜色相互转换
查看>>
mybatis分页练手
查看>>
.net数据库连接字符串加密
查看>>
[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
查看>>
文件监控
查看>>
poi excel 常用api
查看>>
AD提高动态的方法(附SNR计算)
查看>>
在linux程序里面,知道一个函数地址,改函数是属于某个动态库的,怎么样得到这个动态库的全【转】...
查看>>