Bash 使用同一ssh连接执行多个命令
我需要ssh连接到memcached服务器并执行确保连接性的操作。 我应该重复使用相同的ssh连接,并继续执行命令,这些命令的输出将存储在一些日志中。这应该是一个按特定时间间隔运行的计划作业 代码1为每次执行创建多个ssh连接Bash 使用同一ssh连接执行多个命令,bash,ssh,Bash,Ssh,我需要ssh连接到memcached服务器并执行确保连接性的操作。 我应该重复使用相同的ssh连接,并继续执行命令,这些命令的输出将存储在一些日志中。这应该是一个按特定时间间隔运行的计划作业 代码1为每次执行创建多个ssh连接 #!/bin/bash USERNAME=ec2-user HOSTS="10.243.107.xx 10.243.124.xx" KEY=/home/xxx/xxx.pem SCRIPT="echo stats | nc localhost
#!/bin/bash
USERNAME=ec2-user
HOSTS="10.243.107.xx 10.243.124.xx"
KEY=/home/xxx/xxx.pem
SCRIPT="echo stats | nc localhost 11211 | grep cmd_flush"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} -i ${KEY} ${HOSTNAME} "${SCRIPT}"
done
代码2在ssh之后挂起
#!/bin/bash
USERNAME=ec2-user
KEY=/home/xxx/xxx.pem
ssh -l ${USERNAME} -i ${KEY} 10.243.xx.xx
while:
do
echo stats | nc localhost 11211 | grep cmd_flush
sleep 1
done
有更好的方法吗?因为您希望让代码2在远程主机上运行无限while循环,所以在修复
while
语句后,可以将整个过程传递给ssh命令:
#!/bin/bash
USERNAME=ec2-user
KEY=/home/xxx/xxx.pem
ssh -l ${USERNAME} -i ${KEY} 10.243.xx.xx '
while true
do
echo stats | nc localhost 11211 | grep cmd_flush
sleep 1
done
'
不过,我必须警告,我认为整个方法有些脆弱。长期存在的ssh连接往往会由于各种原因而消亡,这并不总是意味着连接实际上已经中断。确保调用此脚本的父脚本注意到已断开ssh连接并重试。我想您可以将此脚本放入一个循环中,每次断开连接时可能会记录一个警告,如果无法重新建立连接,则会记录一个错误。我不确定代码2试图做什么。您是否打算让它在远程主机上运行无限while循环?@Reshma:在第二次尝试中,您打开了一个远程shell,但没有为它提供任何输入。我看到两种方法:模拟通过
expect
传递命令,或者将所有单个命令放在一个大命令中并执行。@joanis是的,我想建立一次连接,然后多次执行该命令……每1分钟、每30分钟、每1小时,1天…您可以使用control master功能在后续执行SSH
之间保持SSH连接的活动状态,这样您就不必每次都重新验证。请参阅。