我注意到 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)