Laravel Supervisor执行schedule:work报错“could not open file: artisan”
问题解决:Supervisor运行Laravel schedule:work报"could not open file: artisan"错误
问题描述
生产服务器通过Supervisor管理两个Laravel后台任务:
php artisan queue:work运行正常php artisan schedule:work抛出could not open file: artisan错误
相关配置及代码如下:
Supervisor配置
[program:influencer-queue-worker] process_name=%(program_name)s_%(process_num)02d command=php8.1 /home/scodus/domains/influencer.scodus.com/public_html/artisan queue:work --sleep=3 --tries=1 autostart=true autorestart=true user=scodus numprocs=1 redirect_stderr=true stdout_logfile=/home/scodus/domains/influencer.scodus.com/queue.log [program:influencer-schedule-worker] process_name=%(program_name)s_%(process_num)02d command=php8.1 /home/scodus/domains/influencer.scodus.com/public_html/artisan schedule:work autostart=true autorestart=true user=scodus numprocs=1 redirect_stderr=true stdout_logfile=/home/scodus/domains/influencer.scodus.com/schedule.log
Console/Kernel.php代码
protected function schedule(Schedule $schedule) { $schedule->command('inspire')->everyMinute()->sendOutputTo(storage_path('logs/inspire.log')); $schedule->command('order:revenue-pending-to-available')->everyMinute(); $schedule->command('order:cancel-without-requirements')->everyMinute(); $schedule->command('order:autocomplete-delivery-attempted-orders')->everyMinute(); }
问题原因
queue:work通过绝对路径指定artisan能正常执行,但schedule:work运行时,Laravel需要在项目根目录环境下加载配置和依赖,仅指定artisan的绝对路径无法让进程识别项目根目录,导致找不到关联文件。
解决方案
修改Supervisor的schedule配置,添加directory参数指定Laravel项目根目录,确保进程在正确路径下执行命令:
[program:influencer-schedule-worker] process_name=%(program_name)s_%(process_num)02d command=php8.1 artisan schedule:work directory=/home/scodus/domains/influencer.scodus.com/public_html autostart=true autorestart=true user=scodus numprocs=1 redirect_stderr=true stdout_logfile=/home/scodus/domains/influencer.scodus.com/schedule.log
操作步骤
- 打开Supervisor配置文件(通常位于
/etc/supervisor/conf.d/目录下) - 给
influencer-schedule-worker模块添加directory参数,值为artisan所在的项目根目录 - 将command中的artisan绝对路径改为相对路径
artisan(保留绝对路径也可,但相对路径更规范) - 更新并重启Supervisor服务:
supervisorctl reread supervisorctl update supervisorctl restart influencer-schedule-worker
验证
重启后查看schedule.log日志,若无报错且定时任务按预期执行,则问题解决。
内容的提问来源于stack exchange,提问作者Technical Noob
相关产品推荐
相关产品推荐

