2014-10-06 3 views
11

Ho provato molte opzioni sia in Mac che in Ubuntu. Ho letto la documentazione RserveCome posso arrestare Rserve con garbo?

http://rforge.net/Rserve/doc.html 

e che per i pacchetti Rserve e RSclient:

http://cran.r-project.org/web/packages/RSclient/RSclient.pdf

http://cran.r-project.org/web/packages/Rserve/Rserve.pdf

non riesco a capire qual è il flusso di lavoro corretta per l'apertura/chiusura di un connessione all'interno di Rserve e per arrestare Rserve 'con garbo'.

Ad esempio, in Ubuntu, ho installato R dal sorgente con ./config --enable-R-shlib (seguendo la documentazione di Rserve) e aggiunto anche la riga "control enable" in /etc/Rserve.conf.

In un terminale Ubuntu:

library(Rserve) 
library(RSclient) 
Rserve() 
c<-RS.connect() 
C## this is an Rserve QAP1 connection 

## Trying to shutdown the server 
RSshutdown(c) 
Error in writeBin(as.integer....): invalid connection 

RS.server.shutdown(c) 
Error in RS.server.shutdown(c): command failed with satus code 0x4e: no control line present (control commands disabled or server shutdown) 

posso, tuttavia, chiudere la connessione:

RS.close(c) 
>NULL 
C## Closed Rserve connection 

Dopo aver chiuso la connessione, ho anche provato le impostazioni (provato anche con argomento 'c' , anche se la connessione è chiusa):

RS.server.shutdown() 
RSshutdown() 

Quindi, le mie domande sono:

1- Come posso chiudere Rserve con garbo?

2- È possibile utilizzare Rserve senza RSclient?

Ho anche guardato

How to Shutdown Rserve(), running in DEBUG

ma la domanda si riferisce alla modalità di debug ed è anche irrisolto. (Non ho abbastanza reputazione per commentare/chiedere se l'arresto funziona in modalità non-debug).

visto anche:

how to connect to Rserve with an R client

Grazie mille!

risposta

15

Caricare pacchetti Rserve e RSclient, quindi connettersi alle istanze.

> library(Rserve) 
> library(RSclient) 

> Rserve(port = 6311, debug = FALSE) 
> Rserve(port = 6312, debug = TRUE) 

Starting Rserve... 
"C:\..\Rserve.exe" --RS-port 6311 
Starting Rserve... 
"C:\..\Rserve_d.exe" --RS-port 6312 

> rsc <- RSconnect(port = 6311) 
> rscd <- RSconnect(port = 6312) 

Sembra che sono in esecuzione ...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"') 
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"') 

Image Name      PID Session Name  Session# Mem Usage 
========================= ======== ================ =========== ============ 
Rserve.exe     8600 Console     1  39,312 K 
Rserve_d.exe     12652 Console     1  39,324 K 

Chiudiamo 'em down.

> RSshutdown(rsc) 
> RSshutdown(rscd) 

E se ne sono andati ...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"') 
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"') 

INFO: No tasks are running which match the specified criteria. 

Rserve può essere utilizzato w/o RSclient iniziando con args e/o uno script di configurazione. Quindi puoi collegarti ad esso da qualche altro programma (come Tableau) o con il tuo codice personale.RSclient fornisce un modo per passare comandi/dati Rserve da un'istanza di R.

Spero che questo aiuti :)

+0

Grazie! Quindi, se ho capito bene, per connettere un processo R con un'istanza di Rserve, devo usare RSclient, corretto? Avevo anche bisogno di specificare il comando "args" in Rserve (altrimenti ottengo un errore fatale) e quando uso il debug = TRUE, la riga di comando rimane in attesa e termina con "Errore: impossibile stabilire una connessione con la sessione R". Quindi, usando un mac, solo l'opzione debug = F sembra funzionare e ho usato il sistema ('ps aux | grep Rserve') [questo apre 2 connessioni, con due ID diversi ..]. Grazie mille!! – user3570398

+0

Funziona alla grande per Rserve (port = 6311, debug = FALSE, args = "- no-save"). Grazie! – user3570398

4

Su un sistema Windows, se si desidera chiudere un'istanza RServe, è possibile utilizzare la funzione di system in R per chiuderlo. Per esempio in R:

library(Rserve) 
Rserve() # run without any arguments or ports specified 
system('tasklist /FI "IMAGENAME eq Rserve.exe"') # run this to see RServe instances and their PIDs 
system('TASKKILL /PID {yourPID} /F') # run this to kill off the RServe instance with your selected PID 

Se avete chiuso l'istanza RServe con quella PID correttamente, appare il seguente messaggio:

SUCCESS: The process with PID xxxx has been terminated.

È possibile controllare l'istanza RServe è stato chiuso inserendo

system('tasklist /FI "IMAGENAME eq Rserve.exe"')

di nuovo. Se non ci sono casi RServe in esecuzione più, si otterrà il messaggio

INFO: No tasks are running which match the specified criteria.

Più aiuto e informazioni su questo argomento può essere visto in this related question.

Si noti che l'approccio "RSClient" menzionato in una risposta precedente è più ordinato e più semplice di questo, ma lo inoltro comunque per coloro che avviano RServe senza sapere come fermarlo.