我正在使用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”命令停止复制文件,结果是关闭了连接。
我正在寻求解决问题的帮助。