启动solr时是否可以忽略“ ps检查”?

时间:2019-05-19 16:31:33

标签: solr

我有一个在Kubernetes下运行Solr的系统,它是CI / CD管道的一部分。该系统通常也可以在“裸机”上运行Solr。在升级到Solr-7.7.1时,我发现如果k8s Solr已在运行,则裸机Solr将无法启动,因为它错误地得出了Solr已经在运行的结论。

这也可能是Solr 6.x中的问题,但是裸机进程(在systemd下运行)在k8s进程中赢得了竞争条件。在生产中可能也可以,但是我希望将来不必在启动和停止Solr时担心这一点。

问题出在Solr脚本(solr-7.7.1 / bin / solr)中:

if [[ "$SCRIPT_CMD" == "start" ]]; then
  # see if Solr is already running
  SOLR_PID=`solr_pid_by_port "$SOLR_PORT"`

  if [ -z "$SOLR_PID" ]; then
    # not found using the pid file ... but use ps to ensure not found
    SOLR_PID=`ps auxww | grep start\.jar | grep -w "\-Djetty\.port=$SOLR_PORT" | grep -v grep | awk '{print $2}' | sort -r`
  fi

  if [ "$SOLR_PID" != "" ]; then
    echo -e "\nPort $SOLR_PORT is already being used by another process (pid: $SOLR_PID)\nPlease choose a different port using the -p option.\n"
    exit 1
  fi

如果未运行裸机Solr,则将找不到SOLR_PID,并且第二次检查其jetty.port与我所需的端口(即默认的Solr端口)相匹配的进程也将找不到。

但是,该ps命令捕获了在kubelet的dockerd下运行的进程,从而导致误报。

是否存在某种方式(也许使用solr.in.sh中的设置)来更改if [ -z $SOLR_PID ];测试的结果,以使脚本不会查看ps输出?

0 个答案:

没有答案