Laravel 定时任务以及 crontab 安装
安装crontab
yum install vixie-cron
yum install crontabs
vixie-cron软件包是cron的主程序.
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序.
查看crontab服务状态,如图则安装成功
service crond status
查看crontab是否设置为开机启动,执行命令:ntsysv
- 上下键:可以在中间的方框当中,在各个服务之间移动;
- 空格键:可以用来选择你所需要的服务,[*]表示开起启动;
- tab键:可以在方框、OK、Cancel之间移动;
- [F1]键:可以显示该服务的说明。
设置开机自启动,如已设置请忽略
systemctl enable crond.service
创建crontab 定时任务
执行命令
crontab -u www -e
注意:默认情况下,crontab是创建root用户.更多时候php-fpm的用户都是www权限.
如果你在执行定时job时候有日志生成操作,这时 root 权限的日志文件,www 账号无法写入。(这是我第一次用crontab犯了一个错.造成用户代金券发送失败.吃一堑长一智,任何地方都要特别谨慎,PHP程序员不仅要写代码,基本运维知识也要多掌握点.特别是在面对正式环境)
命令执行完毕会自动跳进编辑页面,添加如下代码
* * * * * php /home/wwwroot/blog_vue/artisan schedule:run
- home/wwwroot/blog_vue这是我的文件路径,你可以替换自己的
- 默认生成的定时文件目录在:/var/spool/cron
- 上面的命令就是执行所有的schedule任务,你也可以添加指定的任务
* * * * *
默认是零点,你也可以设置其他时间点
定时任务书写
执行命令
php artisan make:command SendPrize
在app/Console/Commons生成文件SendPrize.php
namespace App\Console\Commands;
use App\Models\H5\Dafuweng\DafuwengStep;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class SendTimes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'send:prize';
/**
* 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()
{
//写你的业务
}
}
在app/Console/Kernel.php加入执行shedule
protected $commands = [
SendPrize::class
];
protected function schedule(Schedule $schedule)
{
$schedule->command('send:prize');
}
总结:
定时任务在正式项目用的很多,例如活动每天为用户赠送礼品,数据更新与备份等等.根据自己任务制定合适的定时任务会有助你代码更加简洁高效.
如果想深入了解定时任务的魅力可以参照这篇文章:https://www.cnblogs.com/nb-blog/p/5865392....
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: