以root身份运行twistd时找不到模块

4 投票
1 回答
1785 浏览
提问于 2025-04-15 16:26

我有一个用Twisted写的简单网页服务器,我想用twistd把它启动为守护进程。用reactor.run()的时候一切都很好,但当我以root身份使用twistd -y时,我的直接子目录里的包都找不到。我是以root身份运行twistd,因为服务器要在80端口上运行。twistd的手册上说:

注意,如果twistd以root身份运行,工作目录不会被搜索Python模块。

这真是太糟糕了,那为什么会这样呢?我该怎么解决这个问题?即使我明确设置了--rundir .这个选项,twistd似乎还是忽略了它。

1 个回答

7

一般来说,UNIX系统的经验法则是,当你以管理员身份(root)工作时,搜索当前目录来执行程序是个坏主意。这样做的理由是,它可能会让你容易受到木马病毒的攻击。因此,像twistd这样的程序在以管理员身份运行时,不主动把当前目录加入到Python模块的搜索路径中,实际上是在遵循这个原则。

正如另一位评论者所说,你可以自己明确设置PYTHONPATH,把包含你应用所需代码的目录加进去。

你也可以完全不以管理员身份运行,而是使用authbind来绑定低端口,这样就不需要超级用户权限。这就是我所有服务器部署的方式。

撰写回答