Laravel 7调度器执行服务器命令异常:exec命令无法运行求助
Hey,我来帮你捋一捋$schedule->exec('whoami')->everyMinute();不运行的问题,结合Laravel 7的调度机制,给你几个实用的排查方向:
先给命令加上绝对路径
cron的环境变量PATH通常比你登录shell的要窄很多,很多系统命令可能找不到。先在服务器上执行which whoami,拿到命令的绝对路径(比如/usr/bin/whoami),然后把调度改成:$schedule->exec('/usr/bin/whoami')->everyMinute();这是最常见的原因之一,先试试这个。
给任务添加日志输出
默认情况下exec命令的输出不会被记录,你可以把输出写到日志文件里,方便排查错误:$schedule->exec('/usr/bin/whoami')->everyMinute()->sendOutputTo(storage_path('logs/whoami_schedule.log'));等待一分钟后查看
storage/logs/whoami_schedule.log,如果有错误信息(比如权限不足、命令不存在),就能直接定位问题。手动触发调度器验证
登录服务器,切换到项目的根目录,手动执行php artisan schedule:run,看看控制台有没有输出这条whoami任务的执行记录。如果手动执行能运行,那可能是cron的配置有问题;如果手动也不行,那就是代码或命令本身的问题。检查cron的运行用户
虽然inspire命令能运行,但要确认cron的执行用户和项目所需的用户是否一致。你可以查看cron的日志(通常在/var/log/cron或者/var/log/syslog里),看看执行schedule:run的用户是谁。如果用户不对,可能会导致某些命令没有权限执行。查看Laravel系统日志
打开storage/logs/laravel.log,搜索关键词schedule或者exec,看看有没有和这条任务相关的错误提示,比如任务被跳过、执行失败的记录。
内容的提问来源于stack exchange,提问作者code-8

