所以最近我想远程触发一个python脚本,apache已经安装了,我很熟悉它,所以想了解一下,另一个选择是用python编写一个自定义套接字服务器,这非常简单,但是你必须使这是一项服务。
这不是为了大规模运行,只是在私有网络内运行,并且还可以运行 sh bash 脚本。
答案1
虽然有几种方法可以做到这一点,例如 apache CGI(这种方法)、mod_python 或 mod_wsgi,但它们都不需要很长时间来设置。我发现这种方法步骤最少。
启用 cgi mod 的第一步(在我的例子中,a2enmod 不在我的默认路径中,但在 /usr/sbin/ 中找到)
/usr/sbin/a2enmod cgi
systemctl restart apache2
这就对了 !!现在,如果您将 .sh 或 .py 脚本放入 /usr/lib/cgi-bin 文件夹中,并使其拥有 root 权限并具有执行权限,则可以从网址访问它
http://machine_address/cgi-bin/script.py
请注意,您需要将 shebang 放在脚本的开头
#!/usr/bin/python3
print("Content-Type: text/html;charset=utf-8")
print ("Content-type:text/html\r\n")
print("<H1> Hello, From python server :) </H1>")
更进一步:
您可以将脚本保存在更方便编辑的地方,例如您的主目录或存储库,并将其模拟链接到 /usr/lib/cgi-bin,只需将组 chown 到您的用户组,同时保留所有者 root,并将权限设置为第775章
您可以使用以下方式访问提交的 GET 参数的查询 url:(导入 os 后)
queryString = os.environ.get('QUERY_STRING')
尽管 cgi 脚本必须由 root 拥有才能运行,但在 python 脚本内,任何代码都以用户 www-data(默认 apache 用户)身份运行。这可能没问题,但如果您需要它作为不同的用户,例如您的“普通”用户帐户,一个选项(我研究过)是mod_suexec,它允许指定cgi脚本运行的用户。但我发现将 apache 运行的默认用户更改为我的主用户帐户更容易。它更快/更简单,然后我可以访问错误日志文件,而无需 su 到 root(查看 python 错误),并与我的主文件交互。设置 user/grp in:(然后重新启动)
/etc/apache2/envvars
您可以自定义设置,例如 cgi 路径、符号链接权限等。
/etc/apache2/conf-enabled/serve-cgi-bin.conf
通过将以下内容添加到脚本顶部,您可以在页面上以漂亮的 html 格式输出 python 错误,而不是输出到 apache error.log:
import cgitb cgitb.enable()