Advertisement

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)

还没有任何评论哟~