Запустите несколько экземпляров RStudio в веб-браузере

У меня есть сервер RStudio, установленный на удаленном сервере aws (ubuntu), и я хочу запускать несколько проектов одновременно (один из которых требует много времени для завершения). В Windows есть простое решение с графическим интерфейсом, например «Открыть проект в новом окне». Есть ли что-то подобное для сервера rstudio?

Простой вопрос, но не удалось найти решения, кроме связанного с ним вопроса для Mac, который предлагает

Запуск нескольких сеансов rstudio с использованием проектов

но как?


person RInatM    schedule 08.04.2014    source источник


Ответы (5)


Хотя запуск пакетных сценариев, безусловно, является хорошим вариантом, это не единственное решение. Иногда вам может потребоваться интерактивное использование в разных сеансах вместо того, чтобы делать все как пакетные сценарии.

Ничто не мешает вам запускать несколько экземпляров сервера RStudio на вашем сервере Ubuntu на разных портах. (Мне это особенно легко сделать, запустив RStudio через докер, как описано здесь. Поскольку экземпляр будет продолжать работать, даже когда вы закроете окно браузера, вы можете легко запустить несколько экземпляров и переключаться между ними. При переключении вам просто нужно снова войти в систему.

К сожалению, RStudio-server по-прежнему препятствует одновременному открытию нескольких экземпляров в браузере (см. справочный форум). Это не большая проблема, так как вам просто нужно снова войти в систему, но вы можете обойти ее, используя разные браузеры.

ИЗМЕНИТЬ: несколько экземпляров допустимы, если они находятся в разных браузерах, у одного и того же пользователя-браузера И на одном IP-адресе. например сессия на 127.0.0.1 и другая на 0.0.0.0 подойдут. Что еще более важно, экземпляры продолжают работать, даже если они не «открыты», так что это действительно не проблема. Единственное, на что следует обратить внимание, это то, что вам придется снова войти в систему, чтобы получить доступ к экземпляру.

Что касается проектов, вы увидите, что вы можете переключаться между проектами с помощью кнопки «проекты» в правом верхнем углу, но, хотя это сохранит ваши другие сеансы, я не думаю, что он действительно поддерживает одновременное выполнение кода. Для этого вам понадобится несколько запущенных экземпляров среды R.

ОБНОВЛЕНИЕ 2020 г. Хорошо, сейчас 2020 г., и есть много способов сделать это.

Для запуска скриптов или функций в новой среде R ознакомьтесь с:

  • пакет callr

  • панель заданий RStudio

  • Запускать новые сеансы R или сценарии из одного или нескольких сеансов терминала в Панель терминала RStudio

  • Выйдите из системы и войдите на сервер RStudio как другой пользователь (требуется, чтобы в контейнере было настроено несколько пользователей, что, очевидно, не очень хороший рабочий процесс для одного пользователя, но просто обратите внимание на то, что многие разные пользователи могут получить доступ к тому же экземпляру сервера RStudio без проблем.

Конечно, неплохим вариантом также является запуск нескольких сеансов докеров на разных портах. Обратите внимание, что многие из перечисленных выше способов по-прежнему не позволяют перезапустить основной сеанс R, что не позволяет перезагружать установленные пакеты, переключаться между проектами и т. Д., Что явно не идеально. Я думаю, было бы замечательно, если бы переключение между проектами в сеансе RStudio (сервер) позволило бы заданиям в ранее активном проекте продолжать работать в фоновом режиме, но я понятия не имею, есть ли это в картах для версии с открытым исходным кодом.

person cboettig    schedule 04.12.2014
comment
Можно также использовать профили браузера вместо различных браузеров. - person Thell; 22.01.2015
comment
Использование разных браузеров "профилей" в одном браузере или разных браузеров вместе не работает. Как только вы попытаетесь войти в систему во втором браузере / вкладке, на первой вкладке появится всплывающее окно с сообщением: Этот браузер был отключен от сеанса R, потому что подключился другой браузер (только один браузер одновременно может быть подключен к Сеанс RStudio). Вы можете повторно подключиться, используя кнопку ниже. Версия сервера Rstudio - 0.99.467. - person steadyfish; 07.08.2015
comment
вот пример команды - docker run -d -p 9090: 8787 -v / home / user / analytics: / home / dockeruser / analytics -v / mnt / libs: / home / dockeruser / libs --name mydocker -e USER = dockeruser -e ПАРОЛЬ = dockerpassw -e КОРЕНЬ = ИСТИНА рокер / хадлейверс - person RInatM; 13.11.2015
comment
@cboettig Правильно ли я понимаю, что использование докеров для создания нескольких экземпляров среды R - это единственный способ одновременного запуска нескольких экземпляров? - person James Hirschorn; 01.02.2020
comment
@JamesHirschorn Есть много способов создать несколько экземпляров среды R. Для этого из одного сеанса RStudio просто запустите R на любом количестве вкладок сеанса терминала. Или посмотрите callr. Также проверьте панель RStudio Jobs для запуска скриптов. - person cboettig; 10.02.2020
comment
@cboettig Мой вопрос был непонятен: у меня есть один сервер RStudio, и я хочу иметь возможность одновременного доступа к двум сеансам удаленно в двух разных веб-браузерах (или окнах веб-браузера), как и просил OP. Для этого нужен докер? - person James Hirschorn; 10.02.2020
comment
@JamesHirschorn Я запускаю два экземпляра сервера RStudio на двух разных портах (rserver --www-port 8080 и rserver --www-port 8081). Я установил подключаемый модуль контейнеров с несколькими учетными записями в Firefox. . Если я создам две вкладки контейнера в Firefox, я могу получить доступ к обоим сеансам одновременно. - person akraf; 21.04.2020
comment
@akraf Я попробовал ваше предложение и установил два экземпляра rserver на два разных порта. Однако поведение выглядит так, как будто работает только один сервер: если я получаю доступ к другому порту, даже из другого браузера (Chrome), он отключает сеанс R на первом порту, а затем показывает мне первый сеанс, с которым я работал. в браузере Chrome на втором порту. - person James Hirschorn; 24.05.2020
comment
@JamesHirschorn да с тех пор, как я написал этот комментарий, я заметил, что того, что я написал, было недостаточно ... :( Я использую rstudio-server в единственности (github.com/nickjer/rstudio-singularity, где я привязываю каталог конфигурации каждого экземпляра к другому каталогу. Вы можете попробовать запустить rserver с другой переменной HOME или около того, чтобы он создает каталоги конфигурации в разных местах? Я отправлю свой скрипт в ответ - person akraf; 26.05.2020

Часто вам не нужно несколько экземпляров Rstudio - в этом случае просто сохраните свой код в файле .R и запустите его с помощью командной строки ubuntu (возможно, с помощью экрана)

Rscript script.R

Это запустит отдельный сеанс R, который выполнит работу без зависания Rstudio. Вы также можете передавать аргументы, например

# script.R - 
args <- commandArgs(trailingOnly = TRUE)

if (length(args) == 0) {
  start = '2015-08-01'
} else {
  start = args[1]  
}

консоль -

 Rscript script.R 2015-11-01
person RInatM    schedule 11.06.2014
comment
Да, но что, если вы хотите запускать части скриптов одновременно? - person Statwonk; 24.09.2014

Я думаю, вам нужен R Studio Server Pro, чтобы иметь возможность входить в систему с несколькими пользователями / сеансами.

Вы можете увидеть сравнительную таблицу ниже для справки.

https://www.rstudio.com/products/rstudio-server-pro/ < / а>

person Sousaplex    schedule 30.08.2017

Установка другого экземпляра сервера rstudio не идеальна.

Администраторы серверов Linux, не бойтесь. Вам просто нужен root-доступ или добрый админ.

Создайте группу для использования: groupadd Rwarrior

Создайте дополнительного пользователя с тем же домашним каталогом, что и ваш основной логин Rstudio:

useradd -d / home / пользователь1 пользователь2

Добавьте основного и нового пользователя в группу Rwarrior:

gpasswd -a user2 Rwarrior

gpasswd -a user1 Rwarrior

Позаботьтесь о разрешениях для вашего основного домашнего каталога:

cd / home

chown -R пользователь1: Rwarrior / home / user1

chmod -R 770 / home / user1

chmod g + s / home / user1

Установите пароль для нового пользователя: passwd user2

Откройте новое окно браузера в режиме инкогнито / приватного просмотра и войдите в Rstudio с новым пользователем, которого вы создали. Наслаждаться.

person Sagaponack FX    schedule 20.12.2015
comment
Раньше это работало хорошо, но не с последней версией Rstudio! - person Sahil Seth; 19.10.2017

Я запускаю несколько серверов RStudio, изолируя их в экземплярах Singularity. Загрузите образ Singularity с помощью команды singularity pull shub://nickjer/singularity-rstudio

Использую два скрипта:

run-rserver.sh:

  • Найдите свободный порт
#!/bin/env bash
set -ue

thisdir="$(dirname "${BASH_SOURCE[0]}")"

# Return 0 if the port $1 is free, else return 1
is_port_free(){
  port="$1"
  set +e
  netstat -an | 
    grep --color=none "^tcp.*LISTEN\s*$" | \
    awk '{gsub("^.*:","",$4);print $4}' | \
    grep -q "^$port\$"
  r="$?"
  set -e
  if [ "$r" = 0 ]; then return 1; else return 0; fi
}

# Find a free port
find_free_port(){
    local lower_port="$1"
    local upper_port="$2"
    for ((port=lower_port; port <= upper_port; port++)); do
      if is_port_free "$port"; then r=free; else r=used; fi
      if [ "$r" = "used" -a "$port" = "$upper_port" ]; then
        echo "Ports $lower_port to $upper_port are all in use" >&2
        exit 1
      fi
      if [ "$r" = "free" ]; then break; fi
    done
    echo $port
}

port=$(find_free_port 8080 8200)

echo "Access RStudio Server on http://localhost:$port" >&2


"$thisdir/cexec" \
    rserver \
    --www-address 127.0.0.1 \
    --www-port $port

cexec:

  • Создайте отдельный каталог конфигурации для каждого экземпляра
  • Создайте специальный временный каталог для каждого экземпляра
  • Используйте механизм singularity instance, чтобы избежать того, чтобы разветвленные сеансы R принимались PID 1 и оставались на работе после завершения работы rserver. Вместо этого они становятся потомками экземпляра Singularity и погибают при его отключении.
  • Сопоставьте текущий каталог с каталогом /data внутри контейнера и установите его как домашнюю папку (этот шаг может быть необязательным, если вам не нужны воспроизводимые пути на каждой машине)
#!/usr/bin/env bash
# Execute a command in the container
set -ue

if [ "${1-}" = "--help" ]; then 
echo <<EOF
Usage: cexec command [args...]

Execute `command` in the container. This script starts the Singularity
container and executes the given command therein. The project root is mapped 
to the folder `/data` inside the container. Moreover, a temporary directory
is provided at `/tmp` that is removed after the end of the script.

EOF
exit 0
fi

thisdir="$(dirname "${BASH_SOURCE[0]}")"
container="rserver_200403.sif"

# Create a temporary directory
tmpdir="$(mktemp -d -t cexec-XXXXXXXX)"
# We delete this directory afterwards, so its important that $tmpdir
# really has the path to an empty, temporary dir, and nothing else!
# (for example empty string or home dir)
if [[ ! "$tmpdir" || ! -d "$tmpdir" ]]; then
  echo "Error: Could not create temp dir $tmpdir"
  exit 1
fi
# check if temp dir is empty (this might be superfluous, see
# https://codereview.stackexchange.com/questions/238439)
tmpcontent="$(ls -A "$tmpdir")"
if [ ! -z "$tmpcontent" ]; then
  echo "Error: Temp dir '$tmpdir' is not empty"
  exit 1
fi

# Start Singularity instance
instancename="$(basename "$tmpdir")"

# Maybe also superfluous (like above)
rundir="$(readlink -f "$thisdir/.run/$instancename")"
if [ -e "$rundir" ]; then
  echo "Error: Runtime directory '$rundir' exists already!" >&2
  exit 1
fi
mkdir -p "$rundir"

singularity instance start \
  --contain \
  -W "$tmpdir" \
  -H "$thisdir:/data" \
  -B "$rundir:/data/.rstudio" \
  -B "$thisdir/.rstudio/monitored/user-settings:/data/.rstudio/monitored/user-settings" \
  "$container" \
  "$instancename"

# Delete the temporary directory after the end of the script
trap "singularity instance stop '$instancename'; rm -rf '$tmpdir'; rm -rf '$rundir'" EXIT
singularity exec \
  --pwd "/data" \
  "instance://$instancename" \
  "$@"
person akraf    schedule 26.05.2020