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」,需要通過上面的腳本執行。 –