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,对本地主机上运行的脚本中的内容一无所知。因此,您需要向远程端提供一个完整的脚本。
玩它,玩得开心。。。