如何让服务器端脚本永久运行?
5 个回答
你可以写一个脚本,让它一直在一个循环里等着连接的发生,同时也等着一个信号来关闭这个连接。
http://docs.python.org/library/signal.html
然后要停止它,你只需要运行另一个脚本,给它发送那个信号就可以了。
你可以使用“双重分叉”来在一个新的后台进程中运行你的代码,这个新进程和旧的进程没有关系。比如可以参考这个链接,里面有很多解释性的评论,能帮助你理解。
不过,我不建议把这个作为网站后台任务的主要方法。比如,如果你的Python代码是在Apache进程中运行的,那你可能会分叉出比你想要的更多的进程。更好的做法是单独启动一个守护进程(daemon),并且用一个类似的低权限用户来运行。
在通过Apache服务器启动脚本后,我该如何停止它的运行?
你可以让第二个分叉把守护进程的进程号(pid)写入一个文件,然后从这个文件中读取pid,并发送一个终止信号给它(os.kill(pid, signal.SIG_TERM)
)。
我是不是搞混了?
这就是问题所在!我猜测你是想要一个后台进程,它能在不同的端口上响应网络界面,提供某种特殊的网络服务。如果你只是想处理普通的网页请求,那就不应该这样做,应该依靠Apache来处理你的连接,并且一次只服务一个请求。
如果你在使用Twisted框架,它有一整套系统来启动和停止后台进程。
http://twistedmatrix.com/projects/core/documentation/howto/application.html
我该怎么管理这样的事情呢?
Twisted在这方面表现得很好,看看上面的链接吧。
我是不是搞错了?还是有更好的方法来实现异步的socket通信?
Twisted在异步socket通信方面非常出色。不过,刚开始用的时候可能会让人觉得有点难懂,等你熟悉了就好了!
通过Apache服务器启动脚本一次后,我该怎么停止它的运行呢?
Twisted的工具假设你可以使用命令行,所以如果我理解正确的话,你需要写一个cgi包装器来启动和停止它们。