やったこと

webサービスを作るときに考えたことを垂れ流します

【PHP】execでpythonのスクリプトを実行するのに手こずった!

PHPのexecのコマンドを使ってpythonスクリプトを実行しようとしたら、かなり手こずった・・。

pythonの環境は、下記の記事みたいに共用のディレクトリ「/usr/local/pyenv」の下にpythonをインストールしている。サーバーはAWS
【pyenv】当該サーバ内の全ユーザに指定したPythonバージョンを適用させる - SEワンタンの独学備忘録

普通にexecでスクリプトを実行すると、pyenvの環境変数の関係でエラー出まくってなかなかコードが実行できない。
簡単なコードなら実行できるかもしれないけど、いろいろライブラリをインポートしてるとどこかで突っかかる。

それで、結論から言うと以下のようにsudoを付けてコマンドを実行することにした。
(rootユーザーにはpuenvで必要な環境を設定している)
セキュリティ上危ないかもしれないけど、管理画面からしか実行しない処理なのでこれでよしとした。

<?php
$command = "sudo /usr/local/pyenv/shims/python /var/www/hogehoge/test.py 2>&1;";
exec($command,$output);
print_r($output)

visudoの設定には、下記のようにapachepythonのコマンドを実行できるようにした。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
apache  ALL=(ALL)       NOPASSWD:/usr/local/pyenv/shims/python

なんだか無理やりなやり方だけど、うまくexecでpython実行する方法ないんだろうか・・。