如何正确关闭 Neo4j 数据库,在收到 **停止时间超过 120 秒** 的消息后
任何标准 Neo4j 安装的 bin/
目录下的 neo4j 脚本是关闭正在运行的 Neo4j 实例的主要方法。该脚本接受一个 stop
参数,该参数将尝试通过发送 SIGTERM
信号来关闭正在运行的实例,JVM 将此信号解释为关闭命令并运行已安装的关闭钩子,Neo4j 实现这些钩子以确保干净关闭。
运行 bin/neo4j stop
时,会显示一条消息,指示进程正在停止。然后它等待进程退出,默认情况下为 2
分钟,由环境变量 $NEO4J_SHUTDOWN_TIMEOUT
控制(超时以秒为单位设置)。如果进程在 $NEO4J_SHUTDOWN_TIMEOUT
期限内退出,则 shell 脚本将以状态代码 0 退出,否则它将打印错误消息以及 Neo4j 进程的 PID,并返回状态代码 1
。
需要注意的是,无论哪种情况,Neo4j 进程都将继续运行。原因通常是检查点操作花费的时间比平时长。如果发生这种情况,则仍然可以通过使用 bin/neo4j status
命令来查询 Neo4j 进程的当前状态。如果进程正在运行,则这将返回状态代码 0
并打印其 PID
,或者如果它未运行,则将返回 3
。
以上允许两种检查已要求关闭的 Neo4j 进程状态的方法。
一种是将 $NEO4J_SHUTDOWN_TIMEOUT
环境变量设置为大于 120
秒的值。如果大致知道预期的关闭时间并且希望使用简单的终止命令,则建议使用此方法。
另一种是在 bin/neo4j stop
命令返回非 0
状态(指示进程仍在运行)后,使用 bin/neo4j status
命令的退出代码执行控制循环。在这种情况下,将 $NEO4J_SHUTDOWN_TIMEOUT
设置为较小的值可能更有意义,以便尽快跳转到控制循环。例如
export NEO4J_SHUTDOWN_TIMEOUT=2 # in seconds
if [[! "${bin/neo4j stop}"]]; then
while [["${bin/neo4j status}"]];
sleep 1
echo "Still waiting..."
done;
fi
else, echo "Done, process is now shutdown, continue with whatever you want to do"
此页面是否有帮助?