Laravel Cron 定时任务“跳坑”点
发布时间
阅读量:
阅读量
在 Laravel 中设置定时任务时,可以通过 cron 表达式来触发定时任务。官方文档仅需添加一行代码即可完成定时任务配置。
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
在实际操作过程中发现,在不熟悉Linux以及cron表单规则的情况下可能会遇到一些问题或挑战;为此我们进行了系统的整理和详细记录,并将这些内容分享出来以便大家参考
坑1:环境变量
当Cron无法生效时,可能是Cron执行环境变量不正确引起的。
执行命令
env > /tmp/env.output
访问 /tmp/env.output 文件,并将其中的 PATH 字段完整地导入至位于 /var/spool/cron 目录下的 corntab 文件顶端位置。
crontab 文件示例
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/mysql/bin:/opt/php7/bin:/opt/memcached/bin:/root/bin
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
坑2:Cron 执行用户导致 Laravel log 不可写
通过 crontab -e 命令生成的 Cron 表归于 root 用户。当定时任务在其执行过程中主动记录日志或因发生异常未能捕获时,系统会生成 root 权限的日志文件。这将最终导致 php-fpm 环境中的 www 权限账户无法进行 writes 操作。
因此需要在创建 cron 的时候指定用户
crontab -u www -e
在个人管理系统的环境中,在PHP-FPM系统中运行的所有用户都已设置为域名www,请根据实际需求和具体情况修改配置参数。
坑3:cron 内容最后一行未回车
解决上述两点问题后,如果仍然发现 cron 不执行,请确认
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
代码最后有进行回车换行。
这个坑坑了工程师一个下午 : (
全部评论 (0)
还没有任何评论哟~
