ให้บริการไฟล์ Python CGI บน Synology NAS
ฉันไม่สามารถรับไฟล์ python เพื่อใช้กับ Apache 2.2 หรือ 2.4 โดยไม่มีข้อผิดพลาด 500 ฉันติดตั้ง WebStation, python, perl, php และ Apache 2.2 และ 2.4 แล้ว
ฉันสามารถให้บริการไฟล์คงที่ได้ดีด้วย apache เมื่อฉันพยายามให้บริการ cgi "สวัสดีชาวโลก" ขั้นพื้นฐานที่สุดฉันได้รับข้อผิดพลาด 500 ข้อผิดพลาดคือ
[cgid: error] [pid 10076: tid 140542621480832] (2) ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว: AH01241: exec of ['/volume2/Development/WebRepo/cgi-bin/test.py' ล้มเหลว
พยายามเรียกใช้ทั้งสคริปต์ perl และสคริปต์ python ทั้งสองทำงานได้สำเร็จจากบรรทัดคำสั่ง แต่ไม่ได้รับจาก Apache (ข้อผิดพลาดเดียวกันกับ "ไม่มีไฟล์ดังกล่าว .. ") โปรดทราบว่านี่เป็นข้อผิดพลาด 500 ไม่ใช่ 404 ดังนั้นจึงเห็นไฟล์ ฉันสามารถให้บริการไฟล์ 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) ฉันสามารถ SSH เป็น NAS 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
- ผู้ใช้: admin
- เปิดใช้งาน: [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