用于heredoc
在远程计算机上执行多行命令。尝试获取服务器的 pid 以终止位于远程计算机中的该服务器
#!/bin/bash
HOST_IP="10.180.5.23"
read -p "For HOST RESTART press 1" num
if [ "$num" == "1" ]
then
ssh -t -t $HOST_IP << 'EOSSH'
line=$(pgrep -f host_server1)
echo $line
arr=($line)
sudo kill -9 "${arr[1]}"
EOSSH
fi
错误:kill:(15015) - 不允许操作
答案1
既然你有,pgrep
那么你很可能也有pkill
。
使用pgrep
然后kill
引入了理论上的竞争条件。使用pkill
消除了竞争条件(从脚本中),并且还避免了必须使用变量来保存 PID:
ssh -t -t "$HOST_IP" pkill -f host_server1
或者,如果您想发送KILL
信号:
ssh -t -t "$HOST_IP" pkill -KILL -f host_server1
请注意,使用-f
,pgrep
和pkill
会将模式与整个命令行匹配,而不仅仅是进程名称。
对于-n
和-o
,最新或最旧的(分别)匹配进程将受到影响。因此,如果您想要KILL
最新的host_server1
而不是其他的:
ssh -t -t "$HOST_IP" pkill -KILL -n -f host_server1