[PHP][Laravel][Xserver]ローカル、手動実行でも成功したバッチがCronからの実行で失敗した話

はじめに

XserverでPHPのバッチをCronから実行した時にPHPバージョン違いによりエラーになった話を書きます。

起きたこと

Laravelでバッチ実行しようとしてcronに登録したさいの実行ログをみたらPHPのパースエラーが!
しかもartisanのコマンド内で起きている!?

こんなエラーです
PHP Parse error:  syntax error, unexpected 'class’ (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$’ in /home/xxxxxxx/xxxxxx/xxxx/artisan on line 33

対処ログ


ローカルでも手動実行でも起こらなかったのになぜ!?と思い調べてみました。

ちなみにphp -v で実行されるバージョンはPHP7.4までにあげてあります。

[xsxxxxx@svxxxx logs]$ php -v
PHP 7.4.4 (cli) (built: Apr  9 2020 20:23:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

原因はCronで実行されるときのPHPのバージョン違いでした

XserverのCronでphpコマンドを叩くとPHP5.4のバージョンで実行されるみたいです

そりゃPHP7ベースで作られているアプリは動かないかってわけです。

cronはphpコマンドで実行すると /usr/bin/php -vの方のバージョンをみるみたいです。

[xsxxxx@svxxxx logs]$ /usr/bin/php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

バージョン指定して実行


/usr/bin/php7.3 artisan schedule:run

こんな感じでPHPのバージョン指定してあげたら動きました

Xserverで対応しているPHP一覧


対応しているバージョンは以下の通り。
日々Updateされていると思うのでCron設定時に以下コマンドを実行してみてください。

[xsxxxxx@svxxxxx logs]$ ls -lrt /usr/bin/php[0-9].[0-9]
lrwxrwxrwx 1 root root 23  5月 11 10:41 /usr/bin/php5.4 -> /opt/php-5.4.16/bin/php
lrwxrwxrwx 1 root root 22  5月 11 10:41 /usr/bin/php5.3 -> /opt/php-5.3.3/bin/php
lrwxrwxrwx 1 root root 22  5月 11 10:41 /usr/bin/php5.1 -> /opt/php-5.1.6/bin/php
lrwxrwxrwx 1 root root 23  5月 11 10:41 /usr/bin/php5.5 -> /opt/php-5.5.38/bin/php
lrwxrwxrwx 1 root root 28  5月 26 11:22 /usr/bin/php5.6 -> /opt/php-5.6.40-webp/bin/php
lrwxrwxrwx 1 root root 28  5月 26 11:22 /usr/bin/php7.0 -> /opt/php-7.0.33-webp/bin/php
lrwxrwxrwx 1 root root 23  5月 26 11:22 /usr/bin/php7.2 -> /opt/php-7.2.29/bin/php
lrwxrwxrwx 1 root root 28  5月 26 11:22 /usr/bin/php7.1 -> /opt/php-7.1.33-webp/bin/php
lrwxrwxrwx 1 root root 23  5月 26 11:22 /usr/bin/php7.3 -> /opt/php-7.3.16/bin/php
lrwxrwxrwx 1 root root 22  5月 26 11:22 /usr/bin/php7.4 -> /opt/php-7.4.4/bin/php

Posted by karaagelovers