Shell-Script

sudo kill:不允許通過 SSH 進行操作

  • July 30, 2016

用於在遠端機器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

錯誤:殺死:(15015)-不允許操作

既然你有pgrep它很可能你也有pkill

使用pgrep然後kill引入一個理論上的競爭條件。Usingpkill刪除了競爭條件(從腳本中),並且還避免了必須使用變數來保存 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

引用自:https://unix.stackexchange.com/questions/298297