相关:如何从命令行终止 elasticsearch?

相关:如何从命令行终止 elasticsearch?

我注意到 java 和 elastic search 具有相同的 pid,因此我们编写了一个脚本来终止 java。

附加脚本:

#!/bin/sh -e
#elasticsearch startup script
#chkconfig: 2345 80 05
#description: ElasticSearch


APP=ElasticSearch
# Name of the user to run as
USER=elasticsearch

# Location of Java JDK
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_241

case "$1" in

 # Stop command
  stop)
    echo "Stopping $APP"
    /bin/su -m $USER -c "pkill -9 -f java;"
    #sleep 30
    echo "$APP stopped successfully"
    ;;

  # Start command
  start)
    echo "Starting $APP"
    /bin/su -m $USER -c "/opt/elasticsearch-6.6.1/bin/elasticsearch -d &> /dev/null"
    echo "$APP started successfully"
    ;;
  # Stop command
 # stop)
  #  echo "Stopping $APP"
   # /bin/su -m $USER -c "$BASE/bin/shutdown.sh &> /dev/null"
    #echo "$APP stopped successfully"
    #;;
   #Restart command
   restart)
        $0 stop
        sleep 60
        $0 start
        ;;
  *)
 echo "Usage: /etc/init.d/$APP restart}"
  exit 1
   ;;
esac

exit 0

但是当我执行这个脚本时我看到

root@test:/var/atlassian# ./elastic-auto-restart restart
Stopping ElasticSearch
pkill: killing pid 1956409 failed: Operation not permitted
ElasticSearch stopped successfully
Starting ElasticSearch
ElasticSearch started successfully

脚本正在运行,服务重新启动成功。但我注意到这个错误“pkill:killing pid 1956409 failed: Operation not allowed”用户 ​​Elasticsearch 在这台机器上有 sudo 访问权限。

问候 Aravind Viswanathan。

答案1

您的问题是该部分中的这一行stop

    /bin/su -m $USER -c "pkill -9 -f java;"

因为用户是:

USER=elasticsearch

并且 elasticsearch 没有权限使用 pkill(只有 root 才有)。

为了修复这个问题,你可以删除 elasticsearch 的使用(因为你无论如何都是以 root 身份运行该命令),所以它看起来像这样:

pkill -9 -f java;

这应该可以工作,因为运行此命令时您已经是root用户,不需要以其他用户身份运行此命令(不需要 /bin/su)

相关内容