pythonファイルをCGIとしてレンタルサーバー上でphp経由でCorn実行することで「500 Internal Server Error」を回避する方法
.pyファイルをCGIとしてそのまま実行するのには限界がある
レンタルサーバーなどでpythonが使用できるサーバーはそこそこあります。
ただし普通のやり方では重い処理や重いプラグインを呼び出す処理は「500 Internal Server Error」として処理を拒絶されたりします。
そんな時はphp経由で.pyを実行する方法が有効です。
ここではXREAサーバーを例に.pyをphp経由でCGIとして実行する方法を解説したいと思います。
準備
各種ファイルの作成
今回は下記の3つのファイルを作成します。
test.py メインのファイル
test.sh アクセス権限など書く
test.php アクセス先
以下、各ファイルの記述内容の説明。
test.py
#!/virtual/ユーザー名/.pyenv/versions/3.7.0/bin/python # -*- coding: utf-8 -*- print('Content-type: text/html; charset=UTF-8\n') import pandas as pd a = [1,2,4,2,5,2,1,3,2,1,9,4,5] b = [7,6,6,5,4,4,5,6,7,7,5,6,6] df = pd.DataFrame(a,b) print(df)
test.sh
#!/bin/bash DIR='/virtual/ユーザー名/public_html/test' PYTHON='/virtual/ユーザー名/.pyenv/versions/3.7.0/bin/python' cd ${DIR} ${PYTHON} test.py
サーバーにアップロードし、ファイル属性を「705」にする
外部からのCorn実行を受け付ける際にはファイル属性を「705」にしておく必要があります(755でも可)
また各ファイルに記述しているファイルのパスについてご注意ください。
今回の例では最上部公開フォルダ「public_html」の中に「test」フォルダを作って4つのファイルを入れています。
実行
phpの場所をそのままブラウザのURLに打ち込めばOKです。
http://www.ドメイン名.com/test/test.php
参考にしたページ
soudakyoto-ikou.hatenadiary.jp
レンタルサーバーでpythonで画像を作って自動ツイートするbotの作成について
qiita.com
XREAも基本CORESERVERと同じやり方でいけます。