Laravel 实现定时任务
打赏作者

sswowo

心情差 就出去走走 别对着电脑拉

JellyBool

艾玛,定时任务实现了么 ? @sswowo

ibluekey

@JellyBool laravel 怎么与 七牛云存储 结合呀? 有木有资料

JellyBool

@ibluekey 有的,你可以去看看。

clara

哈哈,正在看你的基础视频,还没看到这儿,看到你发的文字特意进来看看的~~@JellyBool

weiguangnixia

能出一个用laravel 写api接口的视频吗

JellyBool

@weiguangnixia https://laravist.com/series/dive-into-restful-api-with-laravel 这个不知道能不能满足你

liudong0763

老师,5.3版本怎么实现?

JellyBool 回复 liudong0763

不是都一样的么?这个好像并没有改吧。

chenxin

在mac下面要在etc目录下面创建crontab文件就可以执行了!

1965741954
[2016-11-02 17:53:58] local.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Non-static method Illuminate\Contracts\Logging\Log::info() cannot be called statically, assuming $this from incompatible context' in D:\Program Files\phpStudy\WWW\laravel\app\Console\Commands\loginfo.php:42
Stack trace:
#0 {main}  

5.3下出错…

JellyBool 回复 1965741954

你使用了 use Log; 没有…或者 这样 \Log

Addison

视频上有个遗漏,在系统中,在执行

crontab cron.txt

之前,建议执行(Ubuntu 为例)

/etc/init.d/cron status

如果返回

root@05034a881f5d:/app# /etc/init.d/cron status
 * cron is not running

则需要再执行

/etc/init.d/cron start

不然定时任务不会生效(本人遇到的实际情况)

Addison

视频中提到的

crontab -l 

应该是查看用户的 crontab 列表,不是执行定时任务。

usage:	crontab [-u user] file
	crontab [ -u user ] [ -i ] { -e | -l | -r }
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)
yaoye6262

能否给个思路 就是定时任务每天查询一次数据库 然后把查询的结果返回给视图 然后展示 这个是要怎么一个思路?

BuZhongSong

请问 windows 下怎么实现定时任务呢?

JellyBool 回复 BuZhongSong

这个没有研究过。

zhangbao1992 回复 BuZhongSong

可以看这篇文章:Windows10环境中 laravel任务调度 如何启动调度

我刚才就根据它 实现了 Windows 7下的定时任务

原理就是使用 bat 文件和 计划任务

yujiak
$schedule->call(function () {
            Order::where('status',1)->where('addtime','<=',time())->update([
                'status'=>2
            ]);
        })->everyMinute();

这么写的时候可以定时执行,但是写到命令里面就不能定时执行了:

$schedule->command('changeStatus')->everyMinute();

直接使用 php artisan changeStatus 可以正确执行。
请问下,这个是为什么呢?

JellyBool 回复 yujiak

changeStatus 这个具体的定义有么?你可以看看 laravel log ,应该就知道了

yujiak 回复 JellyBool

有定义, php artisan changeStatus 也可以执行

JellyBool 回复 yujiak

看看 laravel log 是什么错误反馈呗

yujiak 回复 JellyBool

找到问题了,是php.ini里面禁用了两个函数

扬扬的小天地

php 7.0 .17 crontab 报错 但是自己写的测试的定时任务可以执行 类似这种 * * * * * test.php 2>&1 >> test.log

Parse error: parse error, expecting '&'' or“variable (T_VARIABLE)”’ in /private/var/www/lara/leaning/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 444

JellyBool 回复 扬扬的小天地

你是怎么下载的 laravel 源码?一是有可能是你的 php版本不符,二是你下载的源码被污染了

Nixus

这节课可以这样理解吗?
laravel 就是把要执行的代码,封装成一个 command 命令,真正去实现定时功能的,还是 crond 这个服务

JellyBool 回复 Nixus

对的,背后就是 cron

Nixus 回复 JellyBool

老师,这种是固定时间周期的定时任务,如果想要实现的任务不是固定周期的呢?
比如,定在2018-01-01 12:00 发送优惠券给用户,这种用什么比较合适呢?

Nixus 回复 JellyBool

总觉得,每分钟读一次数据库,很有问题

JellyBool 回复 Nixus

其实是这样的:系统的 cron 会每分钟执行 artisan schedule:run,然后在由 schedule:run 来判断是不是要执行代码。比如你定义是 dailyAt(‘12:00’),这样是每天 12:00 读一次数据库

Nixus 回复 JellyBool

这个只能在代码里写上具体的时间。如果用户希望自己来指定执行的时间,好像就只能通过读数据库来实现了,然后再由代码判断,数据库中的时间,是否符合用户指定时间

Nixus

老师,希望有时间可以加一个讲解laravel队列的原理的课程
另外,php artisan queue:table这个表中的有多个字段,都有什么用?这个课程中没有讲到,laravel的文档中,也没有提到这些内容,希望可以讲下

JellyBool 回复 Nixus

就是记录laravel 队列的一些基本信息

Nixus 回复 JellyBool

这个应该放到队列那节课里的,我发现available_at这个字段,是指定了队列中的执行时间,时间未到是不会执行的,所以才会觉得,可以用这个替代某些定时任务