【发布时间】:2021-11-15 18:58:10
【问题描述】:
我有一个 Laravel 5.4 应用程序,它在共享主机上,但 cron 作业不工作。我已经在 kernel.php 中设置了命令,如下所示:
$schedule->command('eoddsmaker:get_events')
->withoutOverlapping()
->appendOutputTo(storage_path('logs').'/cron-get_events.log')
->everyMinute();
如果我只是从命令行运行/usr/bin/php-5.6 artisan eoddsmaker:get_events,它运行良好。当它被 cron 作业调用时,虽然它没有运行。这是我的 cron 定义:
* * * * * /usr/bin/php-5.6 /var/sites/c/cyo.mydomain.com/artisan schedule:run >> /var/sites/c/cyo.mydomain.com/cron.log 2>&1
我可以从服务器上的 cron 日志中看到,该任务每分钟都在运行,并且每次运行时,都会将以下输出添加到 cron.log 文件中:
Running scheduled command: '/usr/bin/php' 'artisan' eoddsmaker:get_events > '/dev/null' 2>&1
X-Powered-By: PHP/5.6.8
Content-type: text/html; charset=UTF-8
因此,如果我查看 cron-get_events.log 文件,我已将任务配置为将输出发送到以下内容,因此要深入挖掘,每次运行时都会得到输出:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/sites/c/cyo.mydomain.com/artisan on line 31
Parse error: syntax error, unexpected T_STRING in /var/sites/c/cyo.mydomain.com/artisan on line 31
因为我在共享主机上,所以默认的 PHP 版本是 5.2,我必须在 htaccess 文件中添加一个规则才能让它使用 PHP 5.6。如果我忘记添加规则,我会得到与 cron-get_events.log 中的错误相同的错误,所以这让我相信命令不起作用的原因是因为调度程序运行时正在调用命令使用/usr/bin/php 作为PHP 的路径而不是/usr/bin/php-5.6
有没有办法将任务调度程序配置为使用不同的 PHP 路径?
【问题讨论】:
标签: php laravel laravel-5 laravel-5.4