エックスサーバーでFuelPHPのタスクをoilコマンドで実行する方法
- 公開日:2017/12/16
FuelPHPでバッチ実行用のコマンドを実装するにはタスクを利用します。そして、タスクの実行は、oilコマンドにクラス名を指定します。
例えば、サンプルのタスク(fuel/app/tasks/robots.php)を実行する場合は以下のようなコマンドを実行することになります。
$ oil refine robots
これを、エックスサーバーで実行したい。
というわけで、とりあえずエックスサーバーにSSH接続します。
まずは、phpコマンドを実行してみます。phpコマンドのパスは、エックスサーバーのコマンドパス一覧で確認したところ/usr/bin/php5.6
と記載がありました。(※使用しているPHPのバージョンはサーバーパネルのサーバー情報で確認できます。)
というわけで、以下を実行してみましたがエラーになってしまいました。
/home/hoge
はホームディレクトリです。サーバーパネルのサーバー情報で確認できます。
/example.com/work/fuelphp
はFuelPHPを設置しているディレクトリまでのパスです。
$ /usr/bin/php5.6 /home/hoge/example.com/work/fuelphp/oil refine robots
「oilコマンドはCGI版ではなく、CLI版で実行してください」というようなメッセージが出ます。
エックスサーバーのCLI版のコマンドを調べるため、以下を実行してみたところ/opt/php-5.6.30/bin/php
に設置されていることがわかりました。
$ whereis php
改めて、以下を実行。
$ /opt/php-5.6.30/bin/php /home/hoge/example.com/work/fuelphp/oil refine robots
これで、自作のタスクも実行できると思ったのに、またまたエラーになってしまいました。
自作のタスクではDBへの書き込み処理があるのですが、どうもDB接続ができていないようす。
よーく見てみると、開発環境(DEVELOPMENT)に接続しようとしてしまっていることがわかりました。
.htaccessで環境変数を指定していましたが、これだとHTTPアクセスでないと環境変数が設定されません。
そのため、環境変数が未設定と判断され、fuel/app/bootstrap.phpに記述されている以下に従って開発環境(DEVELOPMENT)扱いになってしまったようです。
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);
そんなわけで、環境変数を設定しつつ、タスクを実行することに。
$ env FUEL_ENV=production /opt/php-5.6.30/bin/php /home/hoge/example.com/work/fuelphp/oil refine robots
これで無事、oilを実行することができました。