Nohup不在for循环中工作

时间:2013-09-18 07:45:56

标签: linux bash shell

我正在尝试在多个Linux远程服务器上执行命令。 我编写了一个shell脚本但它无法执行远程命令。 该脚本正在从配置文件中正确读取用户名和IP但无法执行远程命令。 nohup命令未传递$ {interval},$ {delay}和$ file.csv的值。

interval==${1:-1}
delay=${2:-1800}
b=Server-
c=1
d=-
a=$(date +%Y-%m-%d-%H-%M)
INDEX=0
while read NAMES[${INDEX}] IP[${INDEX}]
do
  ((INDEX=$INDEX+1))
done < config

for (( i=0,j=i+1; i<${INDEX}; i++,j++ ))
do
echo "Server $j Username : "${NAMES[i]}
echo "Server $j IP : "${IP[i]}
file=$b$c$d$a
echo "Server $j file name : "$file
nohup ssh ${NAMES[i]}@${IP[i]} 'vmstat -n ${interval} ${delay} > $file.csv' >& /dev/null &
let c++
done

在配置文件中,条目类似于“用户名ip”:

ajX 11.22.33.44
mnc 55.66.77.88

执行脚本时我没有收到任何错误。脚本的输出是:

Server 1 Username : ajX
Server 1 IP : 11.22.33.44
Server 1 file name : Server-1-2013-09-18-07-39
Server 2 Username : mnc
Server 2 IP : 55.66.77.88
Server 2 file name : Server-2-2013-09-18-07-39

但是在远程服务器上,命令不会被执行,但如果我单独执行它

nohup ssh ajx@11.22.33.44 'vmstat -n 1 30 > vmfile.csv' >& /dev/null &

它工作正常。 nohup是否在for循环中不起作用,或者是否有其他方法可以执行相同的操作。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

更改

nohup ssh ${NAMES[i]}@${IP[i]} 'vmstat -n ${interval} ${delay} > $file.csv' 

nohup ssh ${NAMES[i]}@${IP[i]} "vmstat -n ${interval} ${delay} > $file.csv"

因为你使用了apostrohpies,$ {interval}和$ {delay}参数在客户端上没有被解析,服务器只是抱怨(向stderr发送错误,你没有抓到它。)

您还有一个错误。 你有:

nohup ssh ${NAMES[i]}@${IP[i]} 'vmstat -n ${interval} ${delay} > $file.csv' >& /dev/null &

应该是

nohup ssh ${NAMES[i]}@${IP[i]} "vmstat -n ${interval} ${delay} > $file.csv" > /dev/null &