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 协议》,转载必须注明作者和本文链接
推荐文章: