我有一个Laravel5.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_vents.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文件中添加一条规则,才能让它使用PHP5.6。如果我忘记添加规则,我得到的错误与cron_vents.log中的错误相同,因此我认为命令不能工作的原因是,当调度程序运行时,它使用/usr/bin/php
作为/usr/bin/php-5.6
的路径来调用命令。
是否有方法将任务调度程序配置为使用不同的PHP路径?
发布于 2017-08-30 13:39:41
通过将调度程序任务定义更改为:
$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的路径了。
发布于 2021-11-15 10:58:10
我今天也遇到了这个问题,并且能够通过以下简单的方法来解决它
PHP_BINARY=/usr/bin/php
在.env文件中。
https://stackoverflow.com/questions/45961655
复制相似问题