如何解决在Synology NAS上提供Python CGI文件
我无法将Python文件与Apache 2.2或2.4配合使用,而不会出现500错误。我已经安装了WebStation,安装了python,perl,php以及Apache 2.2和2.4。
我可以用apache提供静态文件。当我尝试提供最基本的“ hello world” cgi时,出现500错误。错误是
[cgid:error] [pid 10076:tid 140542621480832](2)没有这样的文件或目录:AH01241:['/ volume2 / Development / WebRepo / cgi-bin / test.py'的exec失败。
试图同时执行perl脚本和python脚本。两者都可以从命令行成功运行,但是不能从Apache服役(同样的错误,“没有这样的文件..”)。请注意,这是一个500错误,而不是404,因此可以看到该文件。我可以提供静态HTML文件。
python脚本再简单不过了:
#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello,World.";
所有文件均具有755权限。 python的路径是正确的。我不知道下一步该怎么做。
解决方法
Python可以使用http.server.CGIHTTPRequestHandler
开箱即用地提供CGI脚本。
在Synology NAS上,我安装了官方的Python3软件包(版本3.8.2-0150)。
我可以使用admin
SSH到NAS并添加脚本:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。