Python CGI dosyalarını bir Synology NAS üzerinde sunma
Python dosyalarının 500 hatası olmadan Apache 2.2 veya 2.4 ile sunulmasını sağlayamıyorum. WebStation'ı kurdum, python, perl, php ve Apache 2.2 ve 2.4'ü kurdum.
Statik dosyaları apache ile sorunsuz bir şekilde sunabilirim. En basit "merhaba dünya" cgi'sini sunmaya çalıştığımda, 500 hatası alıyorum. Hata
[cgid: error] [pid 10076: tid 140542621480832] (2) Böyle bir dosya veya dizin yok: AH01241: ['/volume2/Development/WebRepo/cgi-bin/test.py' çalıştırılamadı.
Hem bir perl betiği hem de bir python betiği çalıştırmayı denedim. Her ikisi de bir komut satırından başarılı bir şekilde çalışır, ancak Apache ile sunulmadan çalışır ("böyle bir dosya yok" ile aynı hatalar) Ayrıca, bunun bir 500 hatası olduğunu, bir 404 değil, dolayısıyla dosyayı görüyor olduğunu unutmayın. Statik HTML dosyalarını gayet iyi sunabilirim.
Python betiği daha basit olamazdı:
#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";
Tüm dosyaların 755 izni vardır. Python'a giden yol doğrudur. Bundan sonra ne yapacağımı bilemiyorum.
Yanıtlar
Python, CGI betiklerini http.server.CGIHTTPRequestHandler.
Synology NAS'ımda resmi Python3 paketini kurdum (sürüm 3.8.2-0150). NAS'a SSH uygulayabilir adminve bir komut dosyası ekleyebilirim:
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
Bundan sonra onu şu şekilde çalıştırabilirim ( --directorybunun için bir etkisi olmadığını unutmayın, --cgibu yüzden cdorada ben varım ):
cd app && python3 -m http.server --cgi
Sonra makinemde yapabilirim curl http://nas:8000/cgi-bin/hello.py.
Açılışta çalışıyor
Bunu, görev zamanlayıcı aracılığıyla önyükleme sırasında otomatik olarak çalıştırabilirsiniz.
Denetim Masası → Görev Zamanlayıcı → Oluştur → Tetiklenen Görev → Kullanıcı tanımlı komut dosyası . Bunları Genel sekmesinde doldurun :
- Görev: Python CGI
- Kullanıcı: admin
- Etkin: [x]
Ve Kullanıcı tanımlı komut üzerine Görev Ayarları sekmesine:
cd /var/services/homes/admin/app
python3 -m http.server --cgi
Ardından manuel olarak çalıştırabilirsiniz. Ayrıca yeniden başlatıldığında da çalışmalıdır.
İzinler
Görevi farklı çalıştırmak istiyorsanız root, dosya izinlerinin rootbakış açısından doğru olduğundan emin olun . Benim durumumda bazı nedenlerden dolayı tutarsızlık var.
$ 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