6

Я относительно новичок в Unix или сценариях оболочки (абсолютный новичок, чтобы говорить правду), вот в чем дело: у меня есть программное обеспечение BI, которое работает на удаленном сервере UNIX. С помощью клиента SAS в Windows я запускаю некоторые аналитические файлы и создаю несколько плоских файлов, которые необходимо автоматически отправить на этот сервер UNIX. Это не проблема, если использовать команду SAS X для выполнения команд Unix на rsubmit, я загружаю файлы через FTP-запрос, однако хочу использовать команду "sh", когда я вошел на FTP-сервер

ftp -nv << -EOF > /AutomatedReports/Flatfiles/log/sendInv.log
open biserver.myserver.com
user biuser pass1234
prompt
lcd  /container/AutomatedReports/KPI_Flatfiles/
cd  /container/AutomatedReports/apps/flatfiles
put kpi_new_inv.txt
put instock_trend.txt
quit

Приведенный выше код отправляется в UNIX, однако, когда я включаю

sh edastart -x "EX test"

я получаю ошибку, я просто хочу знать, делаю ли я что-то не так, чтобы я мог искать другой способ сделать это. Любая помощь, руководство или ответ будут высоко оценены.

6 ответов6

3

Нет, вы не можете запустить программу на удаленном сервере Unix, используя протокол FTP (если вы не используете некоторые его причудливые расширения).

Почему вы не можете использовать ssh, то есть скопировать файл на удаленный сервер Unix с помощью scp, а затем войти на этот сервер с помощью ssh.

1

Изучите использование TCL/Expect. Модуль Expect to TCL превосходен в автоматизации консольных команд, включая обработку приглашений на вход в систему, паролей и команд ftp. С помощью сценария Expect вы можете автоматизировать полный сеанс входа по FTP. Все, что вы можете сделать вручную, вы можете сделать через Expect. Вы в основном указываете оболочке, какую команду выполнять, и какую подсказку или ответ "ожидаете". То, что вы ожидаете, может быть указано как жестко закодированное значение или как регулярное выражение. Одним из примеров использования Expect является создание сценария автоматического теста для входа в маршрутизатор Cisco (идентификатор пользователя / пароль), настройка маршрутизатора, выполнение некоторых тестов, проверка результатов, а затем выход из маршрутизатора.

1

Я делаю именно это, чтобы выполнить запрос Hive на удаленном хосте Linux и получить результаты обратно в мою программу SAS. Если в вашем коде SAS нет выходных данных, тогда все равно будет хорошей идеей собрать любой вывод STD, так как вы можете выполнить проверку, чтобы убедиться, что все работает нормально.

filename hive pipe 'C:\Progra~1\ICW\bin\ssh.exe server.name.local -l username -i c:\id_rsa " ls "' lrecl=80;

data x ;
  length line $80.;
  infile hive truncover;
  input @1 line $80.;
run;

Использованный мной сторонний исполняемый файл можно найти здесь:

http://www.itefix.no/i2/copssh

Я сгенерировал ключ RSA, чтобы мне не приходилось указывать свои полные учетные данные при каждом входе в систему, но я уверен, что вы сможете это выяснить или просто указать обычный пароль пользователя в качестве параметров ...

Обратите внимание, что вы также можете выполнить указанную выше удаленную команду с помощью команды SAS 'X', если вы не хотите передавать результаты обратно.

Удачи R

1

Если бы вы могли выполнять произвольные команды, это было бы серьезным нарушением безопасности на FTP-сервере. FTP - это только метод передачи файлов; для удаленного выполнения вместо этого включите SSH.

1

Сделайте это поверх оболочки с замазкой, как говорили другие. Если вам нужно автоматизировать процесс, почему бы не настроить задание cron и / или файл триггера?

0

Если вы уже знакомы с PuTTY, используйте Plink от того же разработчика. Он поддерживает удаленное выполнение команд через SSH и может использоваться в автоматизированных сценариях.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .