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/是项目的路径

定时任务:

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

然后在上面的Kernel.php的schedule中添加任务

Laravel5 (cli)命令行执行脚本及定时任务的更多相关文章

  1. jmeter命令行执行脚本_动态参数设置

    从04月换公司开始,就没静下来心来学习,其中发生了比较多的事情吧,不过不管如何,没坚持学习还是因为懒.本周交接完,下周去入职新公司,该静下心来学点什么了. ---------------------- ...

  2. Jmeter:非 GUI 命令行执行脚本文件

    介绍 进行性能测试时,Jmeter 官方文档声明是不建议在 GUI 执行的,此时需要用到命令行. 第一步:环境配置 把 Jmeter安装目录\bin 添加到 系统环境变量path 第二步:命令参数 - ...

  3. Jmeter非命令行执行脚本

    这次我们可以清晰地看到每个线程的执行情况.        这里是我们使用非 GUI 模式运行测试脚本时可以使用的一些命令: -h 帮助 -> 打印出有用的信息并退出 -n 非 GUI 模式 -& ...

  4. Jmeter 非 GUI 命令行执行脚本文件

    https://www.cnblogs.com/yebaofang/p/9803273.html

  5. Python Linux 命令行执行脚本输出重定向print到日志文件

    reference: https://unix.stackexchange.com/questions/182537/write-python-stdout-to-file-immediately   ...

  6. 解决命令行执行shell脚本成功,但crontab执行失败

    实际生产案例 生产机房自建PPTP客户端通过拨号连接到生产机房,但是一旦客户端网络是意外断线再重新拨号 会产生IP冲突,于是写了一个脚本监控PPTP的IP是否有多个(一般冲突以后会生成2个IP) #! ...

  7. 使用命令行执行jmeter的方法

    1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...

  8. Jmeter命令行执行并生成HTML报告

    前提:准备好jmeter脚本,找到jmeter配置文件查看生成的日志格式是否为csv,如果不是请改为csv 注意:使用命令执行jmeter脚本必须使用jmeter 3.0及以上版本1.使用命令行执行脚 ...

  9. 命令行执行php脚本 中$argv和$argc

    在实际工作中有可能会碰到需要在nginx命令行执行php脚本的时候,当然你可以去配置一个conf用外网访问. 在nginx命令行中 使用 php index.php 就可以执行这个index.php脚 ...

随机推荐

  1. LeetCode - Maximum Frequency Stack

    Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...

  2. ios-上传图片到后台

    做第一个项目时,有个版块的个人信息的编辑涉及到头像修改,老大说项目里有通用的代码,让我自己去找.总算找到,搞了许久才弄好,看来理解能力还需要提高啊!! #pragma mark- 修改头像上传后保存 ...

  3. 转载:python list和set的性能比较+两者转换

    两者性能比较(转自http://www.linuxidc.com/Linux/2012-07/66404.htm) 本来是知道在Python中使用Set是比较高效,但是没想到竟然有这么大的差距: ~$ ...

  4. 第三章 jQuery总结 参考文本

    jQuery jQuery是javascript的一个函数库,非常方便,非常主流 利用jQuery开发步骤: 1导入jQuery库 2在$(function(){})的{}中编写jQuery代码 ①j ...

  5. 在C#中如何判断线程当前所处的状态

    在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象.   ThreadState 为线程定义了一组所有可能的执行状态.一旦线程被创建,它就至少 ...

  6. centos7怎么查看、打开和关闭防火墙

    使用centos7会发现,用centos6以前的方式查看.打开和关闭防火墙都无效了.这是因为centos7的防火墙改用firewalld,而不再使用iptables了 查看centos7的防火墙的状态 ...

  7. 变量、&连接、函数与过程、按下某键

    1.变量的声明 常量 信息 为 文本型 = "你好,世界!" '这是常量 变量 结果 为 整数型 '这是程序集变量,在程序集的开头定义即可 变量 测试 为 整数型 = '可以直接给 ...

  8. NFC应用于公交卡

    NFC应用于公交卡https://www.cnblogs.com/liuzhaoyzz/p/7115098.html 带有NFC功能的安卓手机可以给实体公交卡充值,手机虚拟公交卡现在有两种方案,一种是 ...

  9. jmeter分布式、linux运行

    一.jmeter分布式压测(多台电脑一起压测) 1.有多台电脑,每台电脑上都有jmeter,而且这几台电脑都互相能ping通 2.在我的电脑的jmeter,bin目录下,修改jmeter.proper ...

  10. Unity Shader Graph(二)Dissolve Effect

    此篇文章记录Dissolve Effect(溶解特效)的制作过程 软件环境 Unity 2018.1.2f1 Packages: Lightweight Render Pipeline 1.1.11 ...