web-dev-qa-db-ja.com

Rserveを正常にシャットダウンするにはどうすればよいですか?

私はMacとUbuntuの両方で多くのオプションを試しました。 Rserveのドキュメントを読みました

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

rserveおよびRSclientパッケージの場合:

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

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

Rserve内で接続を開いたり閉じたり、Rserveを「正常に」シャットダウンするための正しいワークフローが何であるかを理解できません。

たとえば、Ubuntuでは、ソースから./config --enable-R-shlib(Rserveのドキュメントに従って)を使用してRをインストールし、/ etc /Rserve.confに「controlenable」行を追加しました。

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)

ただし、接続を閉じることはできます。

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

接続を閉じた後、オプションも試しました(接続が閉じている場合でも、引数 'c'を使用して試しました)。

RS.server.shutdown()
RSshutdown()

だから、私の質問は次のとおりです。

1- Rserveを正常に閉じるにはどうすればよいですか?

2- RserveはRSclientなしで使用できますか?

私も見ました

DEBUGで実行されているRserve()をシャットダウンする方法

しかし、質問はデバッグモードに関するものであり、未解決でもあります。 (シャットダウンが非デバッグモードで機能するかどうかをコメント/質問するのに十分な評判がありません)。

また見た:

RクライアントでRserveに接続する方法

本当にありがとう!

13
user3570398

RserveおよびRSclientパッケージをロードしてから、インスタンスに接続します。

> 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)

彼らが走っているように見えます...

> 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

シャットダウンしましょう。

> RSshutdown(rsc)
> RSshutdown(rscd)

そして、彼らは去りました...

> 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は、argsまたはconfigスクリプト、あるいはその両方で開始することにより、RSclientなしで使用できます。次に、他のプログラム(Tableauなど)から、または独自のコードを使用して接続できます。 RSclientは、RのインスタンスからRserveにコマンド/データを渡す方法を提供します。

お役に立てれば :)

17
ZSH

Windowsシステムでは、RServeインスタンスを閉じたい場合は、systemR関数を使用して閉じることができます。たとえば、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
_

そのPIDを使用してRServeインスタンスを正しく閉じた場合、次のメッセージが表示されます。

成功:PIDxxxxのプロセスが終了しました。

次のように入力すると、RServeインスタンスが閉じられたことを確認できます。

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

再び。 RServeインスタンスが実行されていない場合は、次のメッセージが表示されます。

情報:指定された基準に一致するタスクは実行されていません。

このトピックに関する詳細なヘルプと情報は、 この関連する質問 で確認できます。

以前の回答で述べた「RSClient」アプローチは、これよりも整然としていて簡単ですが、停止する方法を知らずにRServeを開始する人のためにとにかく提案します。

5
meenaparam

R内でシャットダウンできない場合は、以下のコードを実行してターミナルで強制終了します。これらのコードはMacで機能します。

$ ps ax | grep Rserve  # get active Rserve sessions

以下のような出力が表示されます。 29155は、アクティブなRserveセッションのジョブIDです。

29155  /Users/userid/Library/R/3.5/library/Rserve/libs/Rserve

38562  0:00.00 grep Rserve

次に実行します

$ kill 29155 
2
Chad