TL;DR 版本:当我要求 Paster 停止守护进程时,它无法读取它自己用于跟踪其进程 ID 的文件。
更长的版本:
我在 Windows Vista 上的 Python 2.7.1 上运行 Paster (pastescript 1.7.3)。
我的第一个惊喜来自运行一个简单的网站:
>paster serve development.ini
Starting server in PID 15184.
serving on http://127.0.0.1:5000
我希望在同一目录中找到 paste.pid 文件,但我没有。奇怪的。没关系,让我们通过终止该过程并重新开始来明确表示。
>paster serve development.ini --pid-file=my.pid
Starting server in PID 20884.
serving on http://127.0.0.1:5000
这一次,它创建了一个名为 my.pid 的文件。在另一个命令窗口中,我可以键入:
>type my.pid
20884
该网站已成功提供服务,并且任务管理器确认有一个使用 PID 20884 运行的 python 进程。
现在,让我们让 Paster 报告守护进程的状态:
>paster serve development.ini --status --pid-file=my.pid
PID None in my.pid is not running
>type my.pid
20884
奇怪的。它声称 my.pid 中的 PID 是None
,而实际上不是。
让我们关闭它。
>paster serve --stop-daemon --pid-file=my.pid
PID in my.pid is not valid (deleting)
>type my.pid
The system cannot find the file specified.
因此,它尝试读取 my.pid,但无法读取它,然后沮丧地删除了它。
与此同时,守护进程继续运行。
我必须手动杀死 paste 守护进程,这是@Lennart Regebro 在一个类似的、不太详细的问题中推荐的。作为测试的一部分,我想将其自动化,所以我希望找到一个更清洁的解决方案。
有什么建议么?