Django和root进程

Mar*_*row 5 python django ping root django-views

在我的Django项目,我需要能够检查局域网上的主机是否可达使用ICMP的ping.我发现这个SO问题解决了如何在Python中ping某些东西以及这个SO问题链接到解释如何使用sodoers文件的资源.

那个设定

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

问题

但是(从第一个SO问题中建议的库的文档字符串开始)"请注意,ICMP消息只能从以root身份运行的进程发送."

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

解决方案

这些是我能想到的解决方案,我的问题是有没有更好的方法只能以root身份执行Django项目的选择部分,除了这些:

  1. 以root身份运行Django(请不要!)
  2. 在队列中放置一个"ping请求",另一个进程 - 以root身份运行 - 可以定期检查和完成.也许像芹菜这样的东西.

有没有更简单的方法?

我想要像"Django以root身份运行"库这样的东西,这可能吗?

Joe*_*Joe 7

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

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

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

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

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