我需要在多台服务器上设置一个cron作业(所有基于Unix的)。为此,我创建了一个脚本(让它称为脚本“A”),它在执行手动时正确设置了cron作业。此外,我已将此脚本上传到所有目标服务器,目的是通过另一台服务器上的另一个脚本自动调用和执行它。
现在,这个其他服务器包含脚本“B”(如上所述),它记录到所有目标服务器并调用脚本A,以便在所有服务器上自动设置cron。
问题是,从不调用脚本A而且永远不会设置cron。脚本B是一个Expect脚本,这是代码,
spawn rsync -avz -e ssh $localDir/autodir $username@$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但没有成功。即使经过大量的翻找,我也找不到合适的解决方案。需要帮助!
答案 0 :(得分:0)
刚刚摆弄时发现了解决方案。这是代码,
spawn rsync -avz -e ssh $localDir/autodir $username@$ipaddress:$remoteDir
sleep 10
expect {
"assword:" {
send "$pwd\r"
sleep 5
exp_continue
}
timeout {
exit
}
}
spawn ssh $username@$ipaddress
sleep 10
expect {
"assword:" {
send "$pwd\r"
sleep 5
send "sh /home/$username/autodir/config/setCron.sh\r"
sleep 5
exp_continue
}
timeout {
exit
}
}
这将登录到我的所有服务器,同步文件/目录并设置cron作业。奇迹般有效。最后我不得不使用ssh。