Melayani file Python CGI pada Synology NAS
Saya tidak bisa mendapatkan file python untuk disajikan dengan Apache 2.2 atau 2.4 tanpa kesalahan 500. Saya telah menginstal WebStation, python, perl, php, dan Apache 2.2 dan 2.4 diinstal.
Saya dapat menyajikan file statis dengan apache. Ketika saya mencoba menyajikan cgi "hello world" yang paling dasar, saya mendapatkan error 500. Kesalahannya adalah
[cgid: error] [pid 10076: tid 140542621480832] (2) Tidak ada file atau direktori seperti itu: AH01241: exec dari ['/volume2/Development/WebRepo/cgi-bin/test.py' gagal.
Mencoba menjalankan skrip perl dan skrip python. Keduanya berjalan dengan sukses dari baris perintah, tetapi tidak dari disajikan dengan Apache (kesalahan yang sama dari "tidak ada file seperti itu ..") Perhatikan juga ini adalah kesalahan 500, bukan 404, jadi ini melihat file. Saya dapat menyajikan file HTML statis dengan baik.
Skrip python tidak bisa lebih sederhana:
#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";
Semua file memiliki 755 izin. Path ke python sudah benar. Saya bingung apa yang harus saya lakukan selanjutnya.
Jawaban
Python dapat melayani skrip CGI di luar kotak, menggunakan http.server.CGIHTTPRequestHandler.
Di NAS Synology saya, saya memiliki paket Python3 resmi yang diinstal (versi 3.8.2-0150). Saya dapat SSH ke NAS sebagai admindan menambahkan skrip:
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
Setelah itu saya bisa menjalankannya seperti ini (catatan yang --directorytidak berpengaruh --cgijadi saya cddisana):
cd app && python3 -m http.server --cgi
Lalu di mesin saya, saya bisa curl http://nas:8000/cgi-bin/hello.py.
Berjalan saat boot
Anda dapat menjalankan ini secara otomatis saat boot melalui penjadwal tugas.
Panel Kontrol → Penjadwal Tugas → Buat → Tugas yang Dipicu → Skrip yang ditentukan pengguna . Isi ini di tab Umum :
- Tugas: Python CGI
- Pengguna: admin
- Diaktifkan: [x]
Dan skrip yang ditentukan pengguna pada tab Pengaturan Tugas :
cd /var/services/homes/admin/app
python3 -m http.server --cgi
Kemudian Anda dapat menjalankannya secara manual. Ini juga harus berjalan saat reboot.
Izin
Jika Anda ingin menjalankan tugas sebagai root, pastikan izin file sudah benar dari rootsudut pandang. Dalam kasus saya, ada perbedaan karena beberapa alasan.
$ 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