期望脚本:通过sftp放置文件并等待完成

时间:2019-01-03 17:02:05

标签: linux sftp expect put shell-exec

我正在使用Expect脚本将6个文件发送到SFTP服务器:

file1.TXT
file1.TXT.SEM
file2.TXT
file2.TXT.SEM
file3.TXT
file3.TXT.SEM

我一直以为

expect "sftp>"

正在等待文件导入,然后再次放置。由于某些原因,并非所有文件都上载到服务器。 在第一个文件完全发送之后,是否有可能发送下一个文件?或类似的东西? 我知道有一个睡眠选项,但是它不能解决问题,因为我永远不知道会有多大文件...

这是我的期望sh:

#!/usr/bin/expect

spawn sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
expect "Enter passphrase for key 'privateKey.pem'"
send "password\n"
expect "sftp>"
send "lcd /var/www/html/STIR/upload/03012019/\n"
expect "sftp>"
send "lpwd\n"
expect "sftp>"
send "cd /var/www/html/server/EXPORT/STIR/\n"
expect "sftp>"
send "put file1.TXT\n"
expect "sftp>"
send "put file1.TXT.SEM\n"
expect "sftp>"
send "put file2.TXT\n"
expect "sftp>"
send "put file2.TXT.SEM\n"
expect "sftp>"
send "put file3.TXT\n"
expect "sftp>"
send "put file3.TXT.SEM\n"
expect "sftp>"
send "bye\n"
interact

我注意到直接在控制台(./expect.sh)中释放脚本后,文件已正确复制。仅当我在PHP中使用shell_exec()函数时才出现问题; 这是来自控制台的日志,显示在浏览器中:

spawn sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
Enter passphrase for key 'privateKey.pem': 
Connected to XXX.XXX.XXX.XXX.
sftp> lcd /var/www/html/STIR/upload/03012019/
sftp> lpwd
Local working directory: /var/www/html/STIR/upload/03012019
sftp> cd /var/www/html/server/EXPORT/STIR/
sftp> put file1.TXT
Uploading file1.TXT to /var/www/html/server/EXPORT/STIR/file1.TXT

file1.TXT   0%    0     0.0KB/s   --:-- ETA
file1.TXT 100%   49KB  49.0KB/s   00:01    
sftp> put file1.TXT.SEM
Uploading file1.TXT.SEM to var/www/html/server/EXPORT/STIR/file1.TXT.SEM

file1.TXT.SEM 100%    0     0.0KB/s   00:00    
sftp> put file2.TXT
Uploading file2.TXT to /var/www/html/server/EXPORT/STIR/file2.TXT

file2.TXT   0%    0     0.0KB/s   --:-- ETA
file2.TXT   2%   32KB  32.0KB/s   00:32 ETA
file2.TXT   5%   64KB  32.0KB/s   00:31 ETA
file2.TXT  11%  128KB  35.2KB/s   00:27 ETA
file2.TXT  14%  160KB  34.9KB/s   00:26 ETA
file2.TXT  20%  224KB  37.8KB/s   00:22 ETA
file2.TXT  26%  288KB  40.4KB/s   00:19 ETA
file2.TXT  32%  352KB  42.8KB/s   00:17 ETA
file2.TXT  35%  384KB  41.7KB/s   00:16 ETA
file2.TXT  41%  448KB  43.9KB/s   00:14 ETA
file2.TXT  47%  512KB  45.9KB/s   00:12 ETAput file2.TXT.SEM

file2.TXT  52%  576KB  47.7KB/s   00:10 ETA
file2.TXT  55%  608KB  46.2KB/s   00:10 ETA
file2.TXT  55%  608KB  41.5KB/s   00:11 ETA
file2.TXT  61%  672KB  43.8KB/s   00:09 ETA
file2.TXT  73%  800KB  52.2KB/s   00:05 ETA
file2.TXT  76%  832KB  50.2KB/s   00:05 ETA
file2.TXT  82%  896KB  51.6KB/s   00:03 ETA
file2.TXT  85%  928KB  49.6KB/s   00:03 ETA
file2.TXT  85%  928KB  44.7KB/s   00:03 ETA
file2.TXT 100% 1087KB  57.2KB/s   00:19    
sftp> put file2.TXT.SEM
Uploading file2.TXT.SEM to var/www/html/server/EXPORT/STIR/file2.TXT.SEM
put file3.TXT

file2.TXT 100%    0     0.0KB/s   00:00    
sftp> put file3.TXT
Uploading file3.TXT to /var/www/html/server/EXPORT/STIR/file3.TXT
put file3.TXT.SEM

file3.TXT   0%    0     0.0KB/s   --:-- ETA
file3.TXT   3%   32KB  32.0KB/s   00:28 ETA
file3.TXT   6%   64KB  32.0KB/s   00:27 ETA
file3.TXT  13%  128KB  35.2KB/s   00:22 ETA
file3.TXT  20%  192KB  38.1KB/s   00:19 ETA
file3.TXT  27%  256KB  40.7KB/s   00:16 ETA
file3.TXT  30%  288KB  39.8KB/s   00:16 ETA
file3.TXT  37%  352KB  42.2KB/s   00:13 ETA
file3.TXT  41%  384KB  41.2KB/s   00:13 ETA
file3.TXT  44%  416KB  40.3KB/s   00:12 ETA
file3.TXT  48%  448KB  39.5KB/s   00:12 ETA

该脚本似乎在上一个文件导入完成之前试图释放另一个“ put”,然后执行“ bye”命令停止复制文件,结果是关闭了连接。

我正在寻求解决问题的帮助。

0 个答案:

没有答案