Просмотр полной версии : копирование файлов между двумя плк304
Подскажите, пожалуйста, как с помощью SysExecute или SysExecute2 скопировать файл с плк304 на другой. Из терминала с помощью SCP получается, но при этом пароль запрашивает. Делал так: scp file.txt IP_remote:/remote_directory. Но если эту команду загнать в SysExecute2, то не работает. И вообще не совсем понятно как работает SysExecute2. Если команда help, то ответ получаю, если набрать к примеру scp или scp help в Putty, то вывалится справка по команде. Опять же в SysExecute2 тишина в ответ.
Да, и еще, как через SysExecute запустить просто скрипт, например /mnt/ufs/root/script.sh
Пробовал разные команды:
/mnt/ufs/root/script.sh
sh /mnt/ufs/root/script.sh
script.sh
sh script.sh
Ничего не получается. В скрипте создается файл с одной стройкой. Через терминал всё ок.
во первых стоит погрузится в изучение команд линукс, далее разобраться какие команды работают непосредственно в плк,т.к. там урезанная версия, третье приведите полное выражение как Вы в программе пользуетесь функцией, если идет запись строки в файл, скорее всего добавляете echo
Спасибо за скорый ответ. Ну команды в любом случае приходится изучать. Какие команды работают, а какие нет выясняю методом тыка.
Cодержание файла script.sh
#!/bin/sh
echo hello > hello.txt
В командной строке скрипт выполняется. Как всё же его выполнить из программы контроллера?
насколько я помню, вроде такой командой для передачи файлов пользовался https://habrahabr.ru/post/56049/
по поводу скрипта, такая команда в консоли cat /mnt/ufs/root/script.sh, выводит содержимое скрипта?
Вы в плк304 пользовались этой командой? Наверное между двумя плк304 это сработало бы, но я конечно слукавил. На самом деле вторый объектом является 3g роутер с OpenWRT, а там команда nc какая то урезанная.
По поводу скрипта - команда cat /mnt/ufs/root/script.sh выводит содержимое скрипта и в консоли, и через SysExecute2
значит и скрипт должен работать, права у скрипта какие? chmod 755 /mnt/ufs/root/script.sh делали?
[QUOTE=nestor;2383333g роутер с OpenWRT, а там команда nc какая то урезанная[/QUOTE]
:) сейчас почитал, почему то люди утверждают наоборот, что там полноценный netcat а не "бусибоксовский огрызок"
Права установлены. Но скрипт не выполняется. Неужели нет рабочего примера.
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:~#
Вот что консоль выдает
здесь (https://www.google.ru/?gws_rd=ssl#newwindow=1&q=openwrt+netcat) ни чего нет полезного?
netcat я еще поизучаю, но на данный момент надо разобраться с выполнением скриптов, не думал что это может оказаться сложным
скрин сделайте консоли в папке где лежит скрипт, наберите команду ls-al
скрипт называется ech.sh
29668
нормально вроде всё, теперь в этом каталоге наберите ./ech.sh должна выполниться запись
ЗЫ и стоить путь в файл который записывается указывать полным, а то КДС не понятно из какой папки выполняет этот скрипт и файл создается именно там, а не в месте где скрипт, можно еще внутри скрипта написать перед записью cd ~
./ech.sh и sh ech.sh в консоли работают
я так понимаю, что именно в таком виде надо загонять команды в 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, то работать будет в обоих случаях. Интересно всё это. Может в программе как то не правильно интерпретируется.
точка ставится если скрипт запускают из своего каталога, если начинается путь от корня то точка не нужна. В SysExecute записывать /mnt/ufs/root # не нужно, только /mnt/ufs/root/www/test.sh
Ну ок, так действительно работает) Спасибо.
Но все равно некоторые команды не работают. В консоли, к примеру, работает копирование по scp
/usr/bin/scp hello.pl root@192.168.1.9:/www/
root@192.168.1.9's password:
В ответ на команду запрашивает пароль. А через SysExecute2 ответа нет. Да и флаг выполнения не устанавливается.
Есть какая то зависимость в выполнении команд. Например help работает, df работает, они явно требуют ответа. Но если в терминале набрать неверную команду. то терминал отвечает, а Sysexecute молчит.
думаю эта статья (http://rus-linux.net/lib.php?name=/MyLDP/consol/HuMan/redirection-ru.html) поможет понять, почему одно взозвращается функцией а другое нет.
По поводу запроса паролей, чтоб не запрашивать пароль обычно набирают логин:пароль@ай-пи_адрес
По поводу запроса паролей, чтоб не запрашивать пароль обычно набирают логин:пароль@ай-пи_адрес
Здесь это не прокатывает.
А статью читаю. Спасибо.
ну вобще логично, эта команда работает когда открыта сессия ssh, но чтоб её открыть всё равно придется вводить пароль, давать согласие на прием ключа, незнаю автоматизируются такие вещи или нет, вариант с nc намного проще
спасибо, разобрался с потоками, теперь отображается вся инфа, ну или почти вся, и еще даже лишняя)) Я всё мучаю scp, не нравится мне первая строчка ответf SysExecute2. Сравните:
296812968229683
Первая - программа, вторая Putty, третья консоль WinSCP. Ну так вот, при первом подключении через Putty создается файл /root/.ssh/known_hosts если ответим да, а если ответим нет то файл тоже создается, но пустой. Если сейчас послать эту же команду через консоль WinSCP то при пустом файле known_hosts будет треться картинка и через 15 сек консоль виснет и выкидывает, при отсутствующем файле он создастся; если файл не пустой, то виснет уже после первой строчки.
Так о чем же говорит первая строчка?
В общем то не важно о чем она говорит, зато я увидел что в консоли WinSCP нельзя использовать команды, которые требуют ввода от пользователя, а это как раз такая команда. Однако в файл записывается всё и через консоль WinSCP, и через SysExecute.
получислось передать файл с помощью 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
получислось передать файл с помощью netcat. На роутере реально урезанная, слушать не умеет, но оно и не надо, главное принять файл может. После каждого приема приходиться в плк команду на прослушку запускать. Значит надо написать скрипт, который будет периодически запускать прием, и причем скрипт должен запускаться с включением роутера.
что и даже так (http://www.owen.ru/forum/showthread.php?t=12729&p=83823&viewfull=1#post83823) не умеет слушать постянно?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot