在BASH中的不同主机上通过ssh运行多个find命令

时间:2014-10-04 21:29:36

标签: bash unix ssh batch-processing

您好,正在使用bsh脚本,该脚本将ssh到多个框并执行一些磁盘空间清理命令。我正在使用find而ssh是无密码的。我在列表中有大约10个方框。但我的逻辑失败了。这是代码:

  #!/bin/bash

#cleanup_paths
NUMLINE=$(cat /hostnames.txt|wc -l)
SERVER_LIST=/hostnames.txt
CPATH1=/random_files
CPATH2=/random_files1
CPATH3=/random_files2
CPATH4=/random_files3
CPATH5=/random_files4
CPATH6=/random_files5
CPATH7=/random_files6
MAX_DISK=86

while read line;
do

ssh $line

CURRENT_USAGE=$(df -h|grep /home|awk '{print $4}'|sed 's/%//')

cleanup_engage(){
      if [ $CURRENT_USAGE -ge $MAX_DISK ]; then
         return 1
      else
         return 0
      fi
}

cleanup_engage

     if [ "$?" -eq "1" ]; then
        find $CPATH1 -type f  -name '*.log' -mtime +3 -exec rm -f {} \;
     sleep 20
        find $CPATH2 -maxdepth 1 -type d  -name 'FTS*' -mtime +5 -exec rm -rf {} \;
     sleep 30
        find $CPATH3 -type f -name '*.log' -mtime +5 -exec rm -f {} \;
     sleep 5
        find $CPATH4 -type f -name '*.log' -mtime +5 -exec rm -f {} \;
     sleep 5
        find $CPATH5 -type f -name '*.log' -mtime +5 -exec rm -f {} \;
     sleep 5
        find $CPATH6 -type f -name '*.log' -mtime +5 -exec rm -f {} \;
     sleep 5
        find $CPATH7 -type f -name '*LOG*' -mtime +5 -exec rm -f {} \;
     sleep 10

/usr/bin/sendmail stack@stack.com<<EOF
subject: 


EOF
    else
    exit 0
fi
((NUMLINE++))
done < $SERVER_LIST

1 个答案:

答案 0 :(得分:0)

当你的脚本执行“ssh”行时,ssh会建立与远程主机的连接并打开一个shell。但是shell对你的脚本一无所知。它只是一个shell,等待输入,你的脚本正在等待ssh终止,所以它可以进入下一行......

看起来你正试图在某处ssh,然后在远程主机上执行一些bash命令。你可以这样做:

ssh $ someremotehost&lt;&lt; EOT (要在远程主机上运行的shell命令) EOT

请记住,在远程主机上打开的shell是一个全新的shell,并且对本地主机上运行的脚本中的内容一无所知。所以你需要将一个comlete脚本提供给远程端。

玩弄它并享受乐趣......