我有一个机器列表,其中每台机器都运行一项服务。我试图弄清楚哪些服务记录了特定的字符串。所以我写了一个shell脚本登录到服务器并grep查看日志:
while read line
do
echo ====
echo $line
ssh root@$line "grep 'my test string' /abc/*/logs/stderr"
echo $line
echo ==========
done
我是通过sh script.sh < /tmp/machine-list
运行的
/ tmp / machine-list每行有一个主机名。
但是在登录到一台机器并回显第二个===
后,脚本退出。
答案 0 :(得分:1)
尝试这样做,我怀疑是shell扩展:
while read line
do
echo ====
echo $line
ssh root@$line <<'EOF'
grep 'my test string' /abc/*/logs/stderr
EOF
echo $line
echo ==========
done
答案 1 :(得分:0)
我不确定,但我认为当{s}会话结束时,while
打开的文件描述符将被关闭。
以下是作品。
hosts=$(cat /tmp/machine-list)
for line in $hosts; do
echo ====
echo $line
ssh root@$line "grep 'my test string' /abc/*/logs/stderr"
echo $line
echo ==========
done
更新
我的猜测很接近
https://unix.stackexchange.com/questions/107800/using-while-loop-to-ssh-to-multiple-servers
bash script to ssh multiple servers in a Loop and issue commands