SynologyNASでPythonCGIファイルを提供する

Oct 19 2020

500エラーなしでApache2.2または2.4で提供されるPythonファイルを取得できません。WebStationがインストールされており、python、perl、php、およびApache2.2と2.4がインストールされています。

私はApacheで静的ファイルをうまく提供できます。最も基本的な「helloworld」cgiを提供しようとすると、500エラーが発生します。エラーは

[cgid:error] [pid 10076:tid 140542621480832](2)そのようなファイルまたはディレクトリはありません:AH01241:['/ volume2 / Development / WebRepo / cgi-bin / test.py'の実行に失敗しました。

PerlスクリプトとPythonスクリプトの両方を実行しようとしました。どちらもコマンドラインからは正常に実行されますが、Apacheで提供された場合は実行されません(「そのようなファイルはありません。」の同じエラー)。また、これは404ではなく500エラーであるため、ファイルが表示されます。静的HTMLファイルを問題なく提供できます。

Pythonスクリプトはこれ以上簡単なものではありません。

#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";

すべてのファイルには755のアクセス許可があります。Pythonへのパスは正しいです。私は次に何をすべきか途方に暮れています。

回答

1 saaj Nov 29 2020 at 21:26

Pythonは、を使用して、すぐにCGIスクリプトを提供できますhttp.server.CGIHTTPRequestHandler。

Synology NASには、公式のPython3パッケージ(バージョン3.8.2-0150)がインストールされています。NASにSSHで接続しadmin、スクリプトを追加できます。

mkdir -p app/cgi-bin

cat << EOF > app/cgi-bin/hello.py
#!/usr/bin/env python3

print('Content-Type: text/html')
print()
print('<html><body><h2>Hello World!</h2></body></html>')
EOF

後、私はこのようにそれを実行することができます(注--directory効果を持っていませんため--cgi、私はそうcdあり):

cd app && python3 -m http.server --cgi

次に、私のマシンで、私はできcurl http://nas:8000/cgi-bin/hello.pyます。

起動時に実行

これは、タスクスケジューラを介して起動時に自動的に実行できます。

コントロールパネル→タスクスケジューラ→作成→トリガーされたタスク→ユーザー定義スクリプト。[全般]タブでこれらを入力します。

  • タスク:Python CGI
  • ユーザー:管理者
  • 有効:[x]

そして、ユーザ定義スクリプトのタスクの設定]タブ:

cd /var/services/homes/admin/app
python3 -m http.server --cgi

次に、手動で実行できます。再起動時にも実行する必要があります。

権限

タスクをとして実行する場合はroot、ファイルのアクセス許可がrootの観点から正しいことを確認してください。私の場合、何らかの理由で矛盾があります。

$ ls -l app/cgi-bin/hello.py -rwxrwxrwx+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py $ sudo ls -l app/cgi-bin/hello.py 
Password: 
-rwx--x--x+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py