0

我正在为 elasticsearch 创建一个托盘箱。我被困在没有启动的服务上,但是在查看日志后,它似乎与托盘无关。我正在使用 1.0 的 elasticsearch apt 包,其中包含一个 init 脚本。如果我运行,sudo service elasticsearch start那么 ES 启动没有问题。如果托盘为我执行此操作,那么它将标准记录为已成功启动

start elasticsearch
 * Starting Elasticsearch Server
   ...done.

然而它没有开始。

sudo service elasticsearch status
 * elasticsearch is not running

我弄乱了初始化脚本,我发现如果我sleep 1在启动守护程序后添加,那么它可以与托盘一起正常工作。

start-stop-daemon --start -b --user "$ES_USER" -c "$ES_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
#this sleep will allow it to work
#sleep 1
log_end_msg $?

我不明白这是怎么回事?

4

1 回答 1

1

我以前也见过这样的问题。它通常归结为期望在脚本完成之前完成某些事情,这可能并不总是发生在服务中,因为它们分叉了后台任务,这些任务在 ssh 连接终止时仍可能被杀死。

对于这类事情,您应该使用 Pallet 的内置代码在监督下运行。这还有一个优点,就是以后可以很容易地从普通的 init.d 切换到 runit 或 daemontools,这对 Elasticsearch 特别有用,因为它是一个 JVM 进程,如果让它运行足够长的时间,几乎任何 JVM 最终都会崩溃。

于 2014-08-25T19:57:49.790 回答