Я использую сценарий ожидания для отправки 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
Iзаметил, что после выпуска скрипта прямо в консоли (./expect.sh) файлы копируются правильно.Проблема только тогда, когда я использую функцию shell_exec () в PHP;И это журнал из консоли, который отображается в браузере:
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» до завершения импорта предыдущего файла, а затем выполняет «пока»Команда прекратить копирование файла, результатом которого является закрытие соединения.
Прошу помощи в решении проблемы.