【笔记】使用 Laravel 的任务调度(定时执行任务)——Linux 系统

Laravel tytrock ⋅ 于 2017-11-22 11:35:09 ⋅ 3199 阅读

laravel中有一个很强大上的功能,只需要在服务器上添加一个cron条目,就可以定时执行所有的laravel任务。



一 、创建Command文件

php artisan make:console RefreshToken

 

创建app/Console/Commands 下创建RefreshToken.php

取一个名字

protected $signature = 'refreshToken';

 

添加描述

protected $description = 'Refresh Api Token';

 

 在 handle() 方法中实现功能

public function handle()
{
    Log::info('Token Refreshed');
}




二、在Kernel.php 文件中注册

protected $commands = [
        \App\Console\Commands\Inspire::class,
        \App\Console\Commands\RefreshToken::class, //添加class
    ];
protected function schedule(Schedule $schedule)
    {
         $schedule->command('refreshToken')
                  ->everyMinute();
    }


三、在服务的/var/spool/cron/root文件中添加代码

在命令行输入

crontab -e

添加如下代码

* * * * * /usr/local/php/bin/php /data/wwwroot/test/artisan schedule:run 1>> /dev/null 2>&1

TIM截图20171122113323.jpg

不需要重启cron服务,因为系统每分钟都会读一遍/var/spool/cron目录下的文件。


开始定时任务

crontab -l

 

或许之后你要结束任务 (此操作删除所有已设定的定时任务,谨慎操作)

crontab -r


问题锦集

1、如果发现按照如下配置还是不能执行的话,可以用以下方法排除问题:

看一下命令有没有使用绝对路径,比如这里使用/usr/local/php/bin/php而不是php,使用/data/wwwroot/test/artisan而不是artisan

如果已经使用了绝对路径还是不执行,那就直接在命令行输入/usr/local/php/bin/php /data/wwwroot/test/artisan schedule:run 1>> /dev/null 2>&1,看看有没有执行,如果没有执行,那就是laravel代码的问题,如果执行了说明是环境变量的问题,好好检查路径的问题。如果不知道php在什么地方,在命令行输入which php,就会提示你php安装在什么位置了。


2、执行crontab -e时先出现一串错误,回车后才显示正常

错误如下

Error detected while processing /home/centos/.vimrc:
line 54:
E518: Unknown option: autochdir
line 92:
E518: Unknown option: foldenable
...

这是由于系统没有配置默认编辑器造成的,可以通过如下命令查看默认编辑器

echo $EDITOR

如果显示为空,则表示系统没有配置默认编辑器。

编辑~/.bashrc

vim ~/.bashrc

在文件末尾加上“export EDITOR=vim”

image.png

然后执行source ~/.bashrc,生效配置

source ~/.bashrc

此时执行crontab -e就没有错误信息显示了


回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter