私は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()をシャットダウンする方法
しかし、質問はデバッグモードに関するものであり、未解決でもあります。 (シャットダウンが非デバッグモードで機能するかどうかをコメント/質問するのに十分な評判がありません)。
また見た:
本当にありがとう!
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にコマンド/データを渡す方法を提供します。
お役に立てれば :)
Windowsシステムでは、RServe
インスタンスを閉じたい場合は、system
のR
関数を使用して閉じることができます。たとえば、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
を開始する人のためにとにかく提案します。
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