【问题标题】:Serving up Python CGI files on a Synology NAS在 Synology NAS 上提供 Python CGI 文件
【发布时间】:2020-10-19 12:55:42
【问题描述】:

如果没有 500 错误,我无法使用 Apache 2.2 或 2.4 提供 python 文件。我已经安装了 WebStation、python、perl、php 和 Apache 2.2 和 2.4。

我可以使用 apache 提供静态文件。当我尝试提供最基本的“hello world”cgi 时,我收到 500 错误。错误是

[cgid:error] [pid 10076:tid 140542621480832] (2)No such file or directory: AH01241: exec of ['/volume2/Development/WebRepo/cgi-bin/test.py' failed.

尝试执行 perl 脚本和 python 脚本。两者都从命令行成功运行,但不能从 Apache 提供服务(“没有这样的文件..”的相同错误)还要注意这是 500 错误,而不是 404,因此它正在查看文件。我可以很好地提供静态 HTML 文件。

python 脚本再简单不过了:

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

所有文件都有 755 个权限。 python的路径是正确的。我不知道下一步该做什么。

【问题讨论】:

  • 不是一个 Apache 用户,但一旦我使用它,我的文件就有正确的权限等,但其中一个文件夹没有。你也碰巧检查了吗?编辑:这似乎也相关:*.com/q/7858987/6655150

标签: python apache synology


【解决方案1】:

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

开机运行

您可以通过任务计划程序在启动时自动运行它。

控制面板任务计划程序创建触发任务用户自定义脚本。在 General 选项卡上填写这些内容:

  • 任务: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

【讨论】:

  • 谢谢,但我从 CLI 运行 python 脚本没有问题,问题是 Synology 中的 Apache 服务器成功地提供了它。
  • 我的回答展示了如何使用 Python 内置 HTTP 服务器来提供 CGI 脚本(可以是任意可执行文件,而不仅仅是“Python 脚本”)。它还可以提供静态文件,因此如果它已经涵盖了您的用例,您可能根本不需要其他服务器(即 Apache)。
  • 谢谢。我了解您所展示的内容,但这与让 Apache 工作以提供 python 脚本无关,这是最初发布的问题。
  • 这正是我所需要的。 1000x 宁愿处理 python 而不是 apache。
最近更新 更多