gpt4 book ai didi

python - Django 和根进程

转载 作者:太空狗 更新时间:2023-10-30 00:41:56 25 4
gpt4 key购买 nike

在我的 Django 项目中,我需要能够使用 ICMP ping 检查 LAN 上的主机是否已启动。我找到了 this SO question它回答了如何在 Python 中执行 ping 命令和 this SO question其中链接到解释如何使用 sodoers 文件的资源。

设置

Device 模型存储 LAN 上主机的 IP 地址,并在将新的 Device 实例添加到数据库后(通过自定义 View ,而不是管理员) 我设想检查设备是否使用 AJAX 调用 API 来响应 ping,该 API 公开了该功能。

问题

但是(根据第一个 SO 问题中建议的库的文档字符串)“请注意,ICMP 消息只能从以根用户身份运行的进程发送。”

我不想以 root 用户身份运行 Django,因为这是不好的做法。然而,这部分过程(发送和 ICMP ping)需要以 root 身份运行。如果使用 Django View ,我希望发送一个 ping 数据包来测试主机的活跃度,那么 Django 本身需要以 root 身份运行,因为这是调用 ping 的进程。

解决方案

这些是我能想到的解决方案,我的问题是除了这些之外,还有什么更好的方法可以仅以 root 身份执行 Django 项目的选定部分:

  1. 以 root 身份运行 Django(请不要!)
  2. 将“ping 请求”放入队列中,另一个进程(以 root 身份运行)可以定期检查和执行。也许像 celery .

有没有更简单的方法?

我想要一个类似“Django 以根用户运行”库的东西,这可能吗?

最佳答案

绝对不行,不要以root身份运行Django代码!

我会以 root 身份运行一个守护进程(用 Python 编写,为什么不呢)然后 IPC在 Django 实例和你的守护进程之间。只要您确定验证内容并正确处理它(例如,将 subprocess.call 与数组等一起使用)并且只传递数据(而不是要执行的命令)就应该没问题。

这是一个使用 web.py 的客户端和服务器示例

服务器:http://gist.github.com/788639客户:http://gist.github.com/788658

您需要安装 webpy.org,但无论如何都值得一试。如果您可以将 IP(或主机名)硬连接到服务器并删除参数,那就更好了。

关于python - Django 和根进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com