我开始在 Lucid 上使用 MongoDB。现在我想在同一个盒子上运行 DB 和配置服务器。它们都使用相同的二进制文件启动,但使用不同的配置文件并在不同的端口上运行。所有 log 和 lib 目录都被拆分,因此一个目录进入 mongodb,另一个目录进入 mongoconf。
每个进程都可以自行启动,没有任何问题。
start mongodb
stop mongodb
start mongoconf
stop mongoconf
但如果我尝试启动两者,第二个只会启动并退出。使用“initctl log-priority debug”,我在日志中得到以下内容。
Jan 6 12:44:12 mongo4 init: event_finished: Finished started event
Jan 6 12:44:12 mongo4 init: job_process_handler: Ignored event 1 (1) for process 5690
Jan 6 12:44:12 mongo4 init: mongoconf (mongoconf) main process (5690) terminated with status 1
Jan 6 12:44:12 mongo4 init: mongoconf (mongoconf) goal changed from start to stop
Jan 6 12:44:12 mongo4 init: mongoconf (mongoconf) state changed from running to stopping
man 5 init 显示您可以使用实例名称来区分两者。我尝试在 upstart 脚本中使用“instance mongoconf”,在另一个脚本中使用“instance mongodb”,但仍然失败。我可以手动启动另一个进程,因此端口号或目录肯定没有冲突。
关于尝试什么或如何获取为什么“以状态 1 终止”的输出,有什么想法吗?
谢谢
答案1
对于发现这一点的勇敢的系统管理员来说,upstart 不只是测试路径,它似乎还测试了索引节点是不同的。这意味着对文件进行硬链接也是不可能的。多次运行相同二进制文件的唯一方法是制作多个副本。
答案2
经过一些测试,我发现 upstart 使用二进制文件的完整路径来查看它是否是同一个进程。因此,在不同位置复制二进制文件将允许您创建两个 upstart 脚本。