PDA

Просмотр полной версии : копирование файлов между двумя плк304



nestor
20.02.2017, 23:38
Подскажите, пожалуйста, как с помощью SysExecute или SysExecute2 скопировать файл с плк304 на другой. Из терминала с помощью SCP получается, но при этом пароль запрашивает. Делал так: scp file.txt IP_remote:/remote_directory. Но если эту команду загнать в SysExecute2, то не работает. И вообще не совсем понятно как работает SysExecute2. Если команда help, то ответ получаю, если набрать к примеру scp или scp help в Putty, то вывалится справка по команде. Опять же в SysExecute2 тишина в ответ.

nestor
21.02.2017, 00:28
Да, и еще, как через SysExecute запустить просто скрипт, например /mnt/ufs/root/script.sh
Пробовал разные команды:
/mnt/ufs/root/script.sh
sh /mnt/ufs/root/script.sh
script.sh
sh script.sh
Ничего не получается. В скрипте создается файл с одной стройкой. Через терминал всё ок.

capzap
21.02.2017, 06:31
во первых стоит погрузится в изучение команд линукс, далее разобраться какие команды работают непосредственно в плк,т.к. там урезанная версия, третье приведите полное выражение как Вы в программе пользуетесь функцией, если идет запись строки в файл, скорее всего добавляете echo

nestor
21.02.2017, 07:59
Спасибо за скорый ответ. Ну команды в любом случае приходится изучать. Какие команды работают, а какие нет выясняю методом тыка.
Cодержание файла script.sh
#!/bin/sh
echo hello > hello.txt

В командной строке скрипт выполняется. Как всё же его выполнить из программы контроллера?

capzap
21.02.2017, 08:17
насколько я помню, вроде такой командой для передачи файлов пользовался https://habrahabr.ru/post/56049/
по поводу скрипта, такая команда в консоли cat /mnt/ufs/root/script.sh, выводит содержимое скрипта?

nestor
21.02.2017, 08:57
Вы в плк304 пользовались этой командой? Наверное между двумя плк304 это сработало бы, но я конечно слукавил. На самом деле вторый объектом является 3g роутер с OpenWRT, а там команда nc какая то урезанная.
По поводу скрипта - команда cat /mnt/ufs/root/script.sh выводит содержимое скрипта и в консоли, и через SysExecute2

capzap
21.02.2017, 09:11
значит и скрипт должен работать, права у скрипта какие? chmod 755 /mnt/ufs/root/script.sh делали?

capzap
21.02.2017, 09:24
[QUOTE=nestor;2383333g роутер с OpenWRT, а там команда nc какая то урезанная[/QUOTE]
:) сейчас почитал, почему то люди утверждают наоборот, что там полноценный netcat а не "бусибоксовский огрызок"

nestor
21.02.2017, 09:34
Права установлены. Но скрипт не выполняется. Неужели нет рабочего примера.

nestor
21.02.2017, 09:35
root@TELEOFIS-RTU968:~# nc
BusyBox v1.23.2 (2017-01-11 17:14:46 MSK) multi-call binary.

Usage: nc [IPADDR PORT]

Open a pipe to IP:PORT

root@TELEOFIS-RTU968:~#



Вот что консоль выдает

capzap
21.02.2017, 09:41
здесь (https://www.google.ru/?gws_rd=ssl#newwindow=1&q=openwrt+netcat) ни чего нет полезного?

nestor
21.02.2017, 09:45
netcat я еще поизучаю, но на данный момент надо разобраться с выполнением скриптов, не думал что это может оказаться сложным

capzap
21.02.2017, 09:50
скрин сделайте консоли в папке где лежит скрипт, наберите команду ls-al

nestor
21.02.2017, 10:03
скрипт называется ech.sh
29668

capzap
21.02.2017, 10:08
нормально вроде всё, теперь в этом каталоге наберите ./ech.sh должна выполниться запись

ЗЫ и стоить путь в файл который записывается указывать полным, а то КДС не понятно из какой папки выполняет этот скрипт и файл создается именно там, а не в месте где скрипт, можно еще внутри скрипта написать перед записью cd ~

nestor
21.02.2017, 10:10
./ech.sh и sh ech.sh в консоли работают

nestor
21.02.2017, 10:17
я так понимаю, что именно в таком виде надо загонять команды в SysExecute.
/mnt/ufs/root # ./mnt/ufs/root/www/test.sh
-sh: ./mnt/ufs/root/www/test.sh: not found
не работает в консоли
а к примеру
/mnt/ufs/root # ./www/test.sh
будет работать. Если вместо ./ поставить sh, то работать будет в обоих случаях. Интересно всё это. Может в программе как то не правильно интерпретируется.

capzap
21.02.2017, 10:26
точка ставится если скрипт запускают из своего каталога, если начинается путь от корня то точка не нужна. В SysExecute записывать /mnt/ufs/root # не нужно, только /mnt/ufs/root/www/test.sh

nestor
21.02.2017, 11:35
Ну ок, так действительно работает) Спасибо.
Но все равно некоторые команды не работают. В консоли, к примеру, работает копирование по scp
/usr/bin/scp hello.pl root@192.168.1.9:/www/
root@192.168.1.9's password:
В ответ на команду запрашивает пароль. А через SysExecute2 ответа нет. Да и флаг выполнения не устанавливается.
Есть какая то зависимость в выполнении команд. Например help работает, df работает, они явно требуют ответа. Но если в терминале набрать неверную команду. то терминал отвечает, а Sysexecute молчит.

capzap
21.02.2017, 11:48
думаю эта статья (http://rus-linux.net/lib.php?name=/MyLDP/consol/HuMan/redirection-ru.html) поможет понять, почему одно взозвращается функцией а другое нет.
По поводу запроса паролей, чтоб не запрашивать пароль обычно набирают логин:пароль@ай-пи_адрес

nestor
21.02.2017, 11:59
По поводу запроса паролей, чтоб не запрашивать пароль обычно набирают логин:пароль@ай-пи_адрес
Здесь это не прокатывает.
А статью читаю. Спасибо.

capzap
21.02.2017, 12:22
ну вобще логично, эта команда работает когда открыта сессия ssh, но чтоб её открыть всё равно придется вводить пароль, давать согласие на прием ключа, незнаю автоматизируются такие вещи или нет, вариант с nc намного проще

nestor
21.02.2017, 15:59
спасибо, разобрался с потоками, теперь отображается вся инфа, ну или почти вся, и еще даже лишняя)) Я всё мучаю scp, не нравится мне первая строчка ответf SysExecute2. Сравните:
296812968229683
Первая - программа, вторая Putty, третья консоль WinSCP. Ну так вот, при первом подключении через Putty создается файл /root/.ssh/known_hosts если ответим да, а если ответим нет то файл тоже создается, но пустой. Если сейчас послать эту же команду через консоль WinSCP то при пустом файле known_hosts будет треться картинка и через 15 сек консоль виснет и выкидывает, при отсутствующем файле он создастся; если файл не пустой, то виснет уже после первой строчки.
Так о чем же говорит первая строчка?

nestor
21.02.2017, 16:17
В общем то не важно о чем она говорит, зато я увидел что в консоли WinSCP нельзя использовать команды, которые требуют ввода от пользователя, а это как раз такая команда. Однако в файл записывается всё и через консоль WinSCP, и через SysExecute.

nestor
25.02.2017, 17:24
получислось передать файл с помощью netcat. На роутере реально урезанная, слушать не умеет, но оно и не надо, главное принять файл может. После каждого приема приходиться в плк команду на прослушку запускать. Значит надо написать скрипт, который будет периодически запускать прием, и причем скрипт должен запускаться с включением роутера.

Малышев Олег
25.02.2017, 19:15
получислось передать файл с помощью netcat. На роутере реально урезанная, слушать не умеет, но оно и не надо, главное принять файл может. После каждого приема приходиться в плк команду на прослушку запускать. Значит надо написать скрипт, который будет периодически запускать прием, и причем скрипт должен запускаться с включением роутера.

А на роутере нет случайно tftp ?
см здесь
https://www.busybox.net/downloads/BusyBox.html

tftp [OPTIONS] HOST [PORT]

Transfer a file from/to tftp server

Options:

-l FILE Local FILE
-r FILE Remote FILE
-g Get file
-p Put file
-b SIZE Transfer blocks of SIZE octets

capzap
25.02.2017, 22:20
получислось передать файл с помощью netcat. На роутере реально урезанная, слушать не умеет, но оно и не надо, главное принять файл может. После каждого приема приходиться в плк команду на прослушку запускать. Значит надо написать скрипт, который будет периодически запускать прием, и причем скрипт должен запускаться с включением роутера.

что и даже так (http://www.owen.ru/forum/showthread.php?t=12729&p=83823&viewfull=1#post83823) не умеет слушать постянно?