有一个守护进程mydaemon
,它的界面不太好。所以它mydaemon-parser.py
被编写来解析配置文件并mydaemon
根据需要启动尽可能多的实例。mydaemon-parser.py
用于subprocess.call()
调用外部命令。我发现mydaemon-parser.py
启动一个mydaemon
实例需要分叉 16 次。upstart 应该如何确定mydaemon
pid。我想使用 upstart,因为mydaemon
它不是一个非常稳定的产品。我厌倦了在它失败后启动它。也许有更好的方法来保持服务正常运行?
答案1
正如上述答案的作者所说,该解决方案是一种“丑陋的黑客行为”。看看Upstart Cookbook——实例部分,看看是否可以为 mydaemon 的各个实例创建一个 .conf 文件。然后,当您运行 mydaemon-parser.py 时,使用
subprocess.call('initctl start mydaemon INST="SomeNewInstance"')
Python 代码必须找到一种方法来识别“SomeNewInstance”的唯一值。
然后,您可以有一个无 pid 包装器作业,该作业可能在 中运行 mydaemon-parser.py pre-start script
。此作业将包含start on
和stop on
节。
那么问题就是停止实例。手册对此提出了建议。请特别注意标题为“6.14.2 另一个实例示例”的部分,以及紧接其前的代码块,其中建议使用以下内容作为示例:
initctl list | grep "^foo " | cut -d\( -f2 | cut -d\) -f1 | while read i
do
sudo stop foo BAR="$i"
done
我将发布一组类似的作业,用于通过 Upstart 启动/停止 PostgreSQL 集群。当我这样做时,我将添加一个关联因为它提供了一些非常好的例子。