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



Hello正在编写bash脚本,该脚本将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

当您的脚本执行"ssh"行时,ssh会建立到远程主机的连接并打开一个shell。但该shell对您的脚本一无所知。它只是一个shell,正在等待输入,而您的脚本正在等待ssh终止,以便进入下一行。。。

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

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

请记住,在远程主机上打开的shell是一个全新的shell,对本地主机上运行的脚本中的内容一无所知。因此,您需要向远程端提供一个完整的脚本。

玩它,玩得开心。。。

最新更新