2017-03-16 30 views
0

我爲sftp編寫了一個腳本。它的工作很好,幾秒鐘。但幾秒後退出。我嘗試了很多方法,但無法找出問題所在。這是我的代碼。期待 - 一段時間後產卵退出

#!/usr/bin/expect 

set now [clock seconds] 
set now [expr {$now - 3600}] 
set date [clock format $now -format {%Y%m%d%H}] 

set SOURCE "/home/sms/SMSC-Sec-2.0.7.0_MT/cdrs/" 
spawn sftp [email protected] 
    expect "password:" 
    send "teledna\r" 
    sleep 1 
    expect "sftp>" 
     send "cd /home/sms/CDRS-Noida \r" 
     expect "sftp>" 
      send "pwd \r" 
      expect "sftp>" 
       send "mput $SOURCE/DNA-AegisGw-CDR_PREPAID_$date*.log \r" 
       expect -exact "sftp>" 
       send "quit \r" 
send "I am here" 

輸出:

spawn sftp [email protected] 
[email protected]'s password: 
Connected to 10.167.xx.xx. 
sftp> cd /home/sms/CDRS-Noida 
sftp> pwd 
Remote working directory: /home/sms/CDRS-Noida 
sftp> mput /home/sms/SMSC-Sec-2.0.7.0_MT/cdrs//DNA-AegisGw-CDR_PREPAID_2017031618*.log 
Uploading /home/sms/SMSC-Sec-2.0.7.0_MT/cdrs//DNA-AegisGw-CDR_PREPAID_201703161800_499_10.170.xx.xx_AS.log to /home/sms/CDRS-Noida/DNA-AegisGw-CDR_PREPAID_201703161800_499_10.170.xx.xx_AS.log 
/home/sms/SMSC-Sec-2.0.7.0_MT/cdrs//DNA-AegisGw-CDR_PREPAID_201703161800_499_10.170.xx.xx_AS.log 2% 1088KB 104.3KB/s 06:39 ETA[[email protected] admin]# 

幾秒鐘後退出的說5那樣

回答

2

既然你mput荷蘭國際集團的許多文件它預計將需要相當一段時間。因此,嘗試使用較長的timeout(默認:10mput後:

send "mput $SOURCE/DNA-AegisGw-CDR_PREPAID_$date*.log \r" 
expect -timeout 600 -exact "sftp>" 

,或者您也可以設置全局timeout

set timeout 600 
spawn ... 

而且無限timeout可由值−1指定。

+0

這意味着你說它不會等到它「sftp>」? –

+0

命令'expect -exact「sftp>」'將在它看到預期模式時結束(意味着它將運行下一個命令),或者它等待模式超時。 – pynexj

+0

無論如何要等到sftp完成了嗎?我不能依靠硬編碼的價值,因爲有些天它需要10分鐘和一些天還有兩個小時.. –