您好,正在使用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
答案 0 :(得分:0)
当你的脚本执行“ssh”行时,ssh会建立与远程主机的连接并打开一个shell。但是shell对你的脚本一无所知。它只是一个shell,等待输入,你的脚本正在等待ssh终止,所以它可以进入下一行......
看起来你正试图在某处ssh,然后在远程主机上执行一些bash命令。你可以这样做:
ssh $ someremotehost&lt;&lt; EOT (要在远程主机上运行的shell命令) EOT
请记住,在远程主机上打开的shell是一个全新的shell,并且对本地主机上运行的脚本中的内容一无所知。所以你需要将一个comlete脚本提供给远程端。
玩弄它并享受乐趣......