0

我需要在多台服务器(所有基于 Unix)上设置一个 cron 作业。为此,我创建了一个脚本(让我们将其称为脚本“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 但没有成功。即使经过大量的翻找,我也找不到合适的解决方案。这里需要帮助!

4

1 回答 1

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。

于 2013-01-08T05:04:22.123 回答