【问题标题】:is it possible to change the path to PHP that the Laravel task scheduler uses是否可以更改 Laravel 任务调度程序使用的 PHP 路径
【发布时间】: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


    【解决方案1】:

    我已经设法通过更改我的调度程序任务定义来解决问题:

    $schedule->command('eoddsmaker:get_events')
         ->withoutOverlapping()
         ->appendOutputTo(storage_path('logs').'/cron-get_events.log')
         ->everyMinute();
    

    收件人:

    $schedule->exec('/usr/bin/php-5.6 /var/sites/c/cyo.mydomain.com/artisan eoddsmaker:get_events >> /var/sites/c/cyo.mydomain.com/cron.log 2>&1')
         ->withoutOverlapping()
         ->appendOutputTo(storage_path('logs').'/cron-get_events.log')
         ->everyMinute();
    

    我仍然很想知道是否有更好的方法来实现这一点,以便我可以在 Laravel 中声明 PHP 的路径

    【讨论】:

      【解决方案2】:

      我今天也遇到了这个问题,并且能够通过简单地包含来解决它

      PHP_BINARY=/usr/bin/php
      

      在 .env 文件中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2023-03-17
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多