Cung cấp tệp CGI Python trên NAS Synology

Oct 19 2020

Tôi không thể nhận tệp python được cung cấp với Apache 2.2 hoặc 2.4 mà không có lỗi 500. Tôi đã cài đặt WebStation, python, perl, php và Apache 2.2 và 2.4.

Tôi có thể phục vụ các tệp tĩnh chỉ với apache. Khi tôi cố gắng phục vụ cgi "hello world" cơ bản nhất, tôi gặp lỗi 500. Lỗi là

[cgid: error] [pid 10076: tid 140542621480832] (2) Không có tệp hoặc thư mục nào như vậy: AH01241: thi hành của ['/volume2/Development/WebRepo/cgi-bin/test.py' không thành công.

Đã cố gắng thực thi cả tập lệnh perl và tập lệnh python. Cả hai đều chạy thành công từ một dòng lệnh, nhưng không chạy thành công với Apache (cùng lỗi "không có tệp như vậy ..") Cũng lưu ý rằng đây là lỗi 500, không phải 404, vì vậy nó đang nhìn thấy tệp. Tôi có thể cung cấp các tệp HTML tĩnh tốt.

Tập lệnh python không thể đơn giản hơn:

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

Tất cả các tệp có 755 quyền. Đường dẫn đến python là chính xác. Tôi lúng túng không biết phải làm gì tiếp theo.

Trả lời

1 saaj Nov 29 2020 at 21:26

Python có thể cung cấp các tập lệnh CGI ngay lập tức bằng cách sử dụng http.server.CGIHTTPRequestHandler.

Trên NAS Synology của mình, tôi đã cài đặt gói Python3 chính thức (phiên bản 3.8.2-0150). Tôi có thể SSH vào NAS dưới dạng adminvà thêm một tập lệnh:

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

Sau đó, tôi có thể chạy nó như thế này (lưu ý rằng điều --directoryđó không có hiệu lực đối với --cgitôi cdở đó):

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

Sau đó, trên máy của tôi, tôi có thể curl http://nas:8000/cgi-bin/hello.py.

Chạy khi khởi động

Bạn có thể chạy điều này tự động khi khởi động thông qua bộ lập lịch tác vụ.

Bảng điều khiển → Bộ lập lịch tác vụ → Tạo → Tác vụ được kích hoạt → Tập lệnh do người dùng xác định . Điền vào những điều này trên tab Chung :

  • Tác vụ: Python CGI
  • Người dùng: admin
  • Đã bật: [x]

Và tập lệnh do người dùng xác định trên tab Cài đặt tác vụ :

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

Sau đó, bạn có thể chạy nó theo cách thủ công. Nó cũng sẽ chạy khi khởi động lại.

Quyền

Nếu bạn muốn chạy tác vụ với tư cách là root, hãy đảm bảo rằng quyền đối với tệp là chính xác theo rootquan điểm của. Trong trường hợp của tôi, có sự khác biệt bởi một số lý do.

$ 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