Программно выполняемые команды на удаленном сервере Linux с использованием R - PullRequest
0 голосов
/ 31 мая 2019

Мне удалось использовать команду shell() на R, чтобы выписать инструкции по получению доступа к серверу AWS EC2 Linux.

shell("chmod 400 rstudio.pem")

shell("ssh -i \"rstudio.pem\" ec2-user@[address number here].us-east-2.compute.amazonaws.com")

Но как только я получил доступ к серверу Linux от R. И я попытался запустить

shell("sudo yum -y update")

Он не запускался и просто некоторое время оставался в режиме мышления, а затем я получил сообщение об ошибке «Дочерний процесс не запущен. Нажмите кнопку ОК, чтобы завершить его».

Как мне запускать команды на сервере Linux после получения доступа от R, запущенного на моем компьютере?

1 Ответ

0 голосов
/ 31 мая 2019

Проблема, с которой вы сталкиваетесь, заключается в том, что каждый вызов shell выполняется в своем собственном процессе.Таким образом, команда ssh, которая открывается в первом процессе, - это не то, что получает команды, которые выдаются в последующих вызовах оболочки.

Предполагая, что основной оболочкой является bash, вы можете продемонстрировать это, используя:

# echo PID of shell
system('echo $$') # 20859
system('echo $$') # 20860

Если вы намереваетесь использовать R в качестве точки входа в вызов ssh, вы можете передать команды для выполненияудаленно как часть вашего звонка в ssh.Он использует ssh для подключения и запуска команды всего за один вызов.

Например, получить использование диска с удаленного хоста

command <- 'ssh -i "rstudio.pem" ec2-user@[address number here].us-east-2.compute.amazonaws.com df -H'
system(command)

Я ожидаю, что ваша команда будет выглядеть следующим образом:

command <- 'ssh -i "rstudio.pem" ec2-user@[address number here].us-east-2.compute.amazonaws.com sudo yum -y update'
system(command)

Если вы хотите выполнить серию команд, вы можете попробовать перечислить их в качестве входных данных.Это, в свою очередь, передаст их в ssh через стандартный ввод.Это немного странное поведение, но может быть достаточно для ваших целей.

inputs <- c('echo "Starting Command"', 'df -h', 'echo "All done."')
command <- 'ssh -i "rstudio.pem" ec2-user@your.aws.ec2.address'
system(command, input=inputs)
...