0
我需要在多个服务器(基于所有Unix)上设置cron作业。为此,我创建了一个脚本(让我们将其称为脚本“A”),该脚本在手动执行时设置正确的cron作业。另外,我已经将此脚本上传到所有目标服务器,并打算通过另一台服务器上的另一个脚本自动调用并执行它。通过Expect执行远程服务器上的shell脚本
现在,这个其他服务器包含脚本“B”(如上所述),它将登录到所有目标服务器并调用脚本A以便在所有服务器上自动设置cron。
问题是,脚本A永远不会被调用,并且cron永远不会被设置。脚本B是一个Expect脚本和这里的代码,
spawn rsync -avz -e ssh $localDir/autodir [email protected]$ipaddress:$remoteDir
sleep 10
expect {
"assword:" {
send "$pwd\r"
sleep 5
exp_continue
}
expect {
"@" {
send "cd /home/$username/autodir/config\r"
sleep 5
exp_continue
expect "@"
send "./setCron.sh" # NEED TO EXECUTE THIS AT REMOTE SERVER
sleep 5
exp_continue
}
}
"yes/no" {
send "yes\r"
set timeout -5
exp_continue
}
-re $prompt {
send "\r"
}
timeout {
exit
}
eof {
exit
}
}
基本上,我要寻找一个通用的解决方案来调用一个远程服务器上的脚本,而不使用SSH或公钥验证,因为我不能使用这两种方法由于一些限制。因此我尝试使用Expect但没有成功。即使经过大量搜索,我也找不到合适的解决方案。这里需要帮助!
您是否尝试将可执行文件的完整路径?例如:使用/ usr/bin/rsync而不是rsync –
rsync部分可以忽略,因为它只是将脚本A上传到远程服务器。它没有问题。它的实际部分*调用*失败的脚本A.这部分:发送“./setCron.sh”。这是我的脚本“A”,需要通过上面的脚本执行。 –