SynologyNASでPythonCGIファイルを提供する
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へのパスは正しいです。私は次に何をすべきか途方に暮れています。
回答
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