Laravel 的任务调度——计划任务

版本:Laravel 5.2

Laravel这个任务调度功能最大了优势就在于增加任务时不需要SSH到服务器增加Cron条目。但前期准备工作还是必须要加入一条Cron的。


1、服务器相关配置:

准备工作:

启动调度器

ssh 到服务器或者直接在本地环境 终端中输入命令:

#  crontab -e  


解释下这个命令:实际作用就是在服务器的/var/spool/cron/root文件中添加代码


添加以下命令:

官方例子:

#  * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

命令示意:

# * * * * * phppath 项目路径/artisan schedule:run >> /dev/null 2>&1,这里php和项目目录建议使用绝对路径。


php路径:/usr/local/php/bin/php,也可输入命令whereis查看:


配置完之后查看任务列表是否添加成功:

# crontab -u root -l


2、代码编写:

 AppConsoleCommands目录下,  在创建计划任务TestCommand.php,任务内容就是打印log日志:



可以将所有的计划任务定义在 AppConsoleKernel ,定义调度任务 将任务加入项目任务列表:


任务执行的结果:



到此算是顺利测试成功了。


那如果没执行呢,就只有两个原因了:1Laravel代码问题; 2web服务器 Crond服务未启动。

1、在终端直接执行命令——就是上面配的那个命令,示例如下:
/usr/local/php/bin/php /var/www/html/test/artisan schedule:run 1>> /dev/null 2>&1

看有没有执行结果,没有的话那就是代码有BUG ==,自己解决吧。


2、还不能执行:那就在终端运行命令:

# pgrep crond

看看是否打印出PID,如果没有就意味着crond服务没启动。

此时运行命令:

#crond restart 

重启crond,可能这个原因占多数。


尝试了一下:

果然如此,1crond 服务未启动,2中代表已启动,PID = 78


具体调度频率设置

当然,你可以针对你的任务来分配多种调度计划:

方法                     描述

->cron('* * * * * *'); 自定义调度任务

->everyMinute(); 每分钟执行一次任务

->everyFiveMinutes(); 每五分钟执行一次任务

->everyTenMinutes(); 每十分钟执行一次任务

->everyThirtyMinutes(); 每半小时执行一次任务

->hourly(); 每小时执行一次任务

->hourlyAt(17); 每一个小时的第 17 分钟运行一次

->daily(); 每到午夜执行一次任务

->dailyAt('13:00'); 每天的 13:00 执行一次任务

->twiceDaily(1, 13); 每天的 1:00 13:00 分别执行一次任务

->weekly(); 每周执行一次任务

->monthly(); 每月执行一次任务

->monthlyOn(4, '15:00'); 在每个月的第四天的 15:00 执行一次任务

->quarterly(); 每季度执行一次任务

->yearly(); 每年执行一次任务

->timezone('America/New_York');设置时区


本文链接二维码可以保存在本地:保存

| 浏览 (1982) | (0) | (0) | | 2017-11-01 15:46:45 |


相关文章

  1. Mac安装Swoole扩展phpize 时 Cannot find autoconf 解决方法
  2. mac下安装swoole扩展报错PHP Startup Unable to load dynamic library
  3. Laravel 数据库事务
  4. PHP贷款等额本息、等额本金计算月供还款计划公式
  5. Laravel 关闭过滤排除部分路由VerifyCsrfToken 验证
  6. Laravel Horizon监控Redis队列queue