Ubuntu中Laravel的定时任务不执行可能遇到的问题及解决方案

阅读 (8)
最近遇到的问题,以前几台服务器上部署的Laravel定时任务都没出现问题,这次的服务器,不是阿里云的,用的lnmp一键安装包也换了,出现了这个问题,记录一下解决路径

如果不想一步步排查,可以直接看第4步,说不定就是你要的答案

1.查看日志

首现出现这种问题,先查日志

Ubuntu系统默认cron日志是未开启的, 可以先到/var/log目录下是找一下cron.log文件,应该是没有的,如果已经打开,就直接查看日志,如果没开,就先打开日志。

vi /etc/rsyslog.d/50-default.conf

打开文件,在文件中找到cron.*,把前面的#去掉,保存退出,输入

sudo service rsyslog restart

重启系统日志,然后稍微等下应该就能在/var/log目录下看到cron.log,

tail -f cron.log

就可以查看cron运行日志了。我遇到类似以下的报错

(root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)

网上查阅,大概原因是cron执行完你的命令后就会给你发一封邮件,而我连邮件服务器或者相关配置都不知道在哪,也没配过,网上大多的解决方案就是在定时任务后添加:

>/dev/null 2>&1

但是我Laravel的配置本来就写了的

* * * * * cd /data/wwwroot/project && php artisan schedule:run >> /dev/null 2>&1

那我就纳闷了,难道我还有别的定时任务吗?

首选crontab -e查看的是当前登录用户的,我是root,那我再查一下www用户的

crontab -u www -l

然而并没有任何任务

2.另一个“不为我知”的定时任务

继续查资料,发现还有一个编辑定时任务的任务,在/etc目录下,进到etc下,果然还有个crontab,编辑下看看

vi /etc/crontab

如图,这好像系统自带的任务,上面注释自己看了,看到这几个任务后没有>/dev/null 2>&1,但查立相关任务,得到的只是系统任务,虽然确实是这几个任务导致的邮件通知,但实际经测试,虽然邮件通知是报错了,但并不影响其它定时任务,所以这里也不关闭,如果不放心可以先注释

3.定义任务命令测试

如果我在终端,直接输入命令

cd /data/wwwroot/project && php artisan schedule:run >> /dev/null 2>&1

在Laravel的日志中,自已打个日志,是看到任务执行了的,但为什么crontab不执行!

继续探索,再写一条简单定义任务加到crontab中

#crontab -e

加一条任务

* * * * * echo "Hello World" > /tmp/cron.txt 2>&1

再查看/tmp/cron.txt,里面是会被写入 Hello World 的

4.最后的尝试:php路径写成绝对路径

首先看一下PHP路径在哪

#whereis查找php
root@root:/tmp# whereis php
#结果如下
php: /usr/bin/php7.2 /usr/bin/php /usr/lib/php /etc/php /usr/local/php /usr/share/php7.2-readline /usr/share/php7.2-json /usr/share/php /usr/share/php7.2-opcache /usr/share/php7.2-common /usr/local/php/bin/php /usr/share/man/man1/php.1.gz

然后把定时任务里的php路径改一下

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

其实前三个路径我在一开始就都试了一下,好像没啥用,突然我想起我的安装路径好像是是/usr/local/php下面

然后自己确认了一下,换成了

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

保存,耐心等待!终于Laravel日志刷出来了!至于为什么这里要写绝对路径,而我在其它服务器上没有写绝对路径,暂时我也没找到问题,有待探索,暂时先这样。

最后的最后:关闭crontab日志

重新注释crontab日志开关

vi /etc/rsyslog.d/50-default.conf

sudo service rsyslog restart

到这就结束了,码农的日常生活...

更新于:2020-02-28 10:07:08

留言

发表评论

标记为*的字段是必填项(邮箱地址不会被公开), 由于国内舆论控制, 评论需要管理员审核通过方可展示

返回顶部