以root身份运行twistd时找不到模块
我有一个用Twisted写的简单网页服务器,我想用twistd把它启动为守护进程。用reactor.run()
的时候一切都很好,但当我以root身份使用twistd -y
时,我的直接子目录里的包都找不到。我是以root身份运行twistd,因为服务器要在80端口上运行。twistd的手册上说:
注意,如果twistd以root身份运行,工作目录不会被搜索Python模块。
这真是太糟糕了,那为什么会这样呢?我该怎么解决这个问题?即使我明确设置了--rundir .
这个选项,twistd似乎还是忽略了它。
1 个回答
7
一般来说,UNIX系统的经验法则是,当你以管理员身份(root)工作时,搜索当前目录来执行程序是个坏主意。这样做的理由是,它可能会让你容易受到木马病毒的攻击。因此,像twistd这样的程序在以管理员身份运行时,不主动把当前目录加入到Python模块的搜索路径中,实际上是在遵循这个原则。
正如另一位评论者所说,你可以自己明确设置PYTHONPATH,把包含你应用所需代码的目录加进去。
你也可以完全不以管理员身份运行,而是使用authbind
来绑定低端口,这样就不需要超级用户权限。这就是我所有服务器部署的方式。