Ubuntu サーバーのバックグラウンドで定期的にスクリプトを実行しています。RStudio で実行すると、すべてが期待どおりに機能します。しかし、Rscriptを使用してターミナル経由で実行すると、pythonスクリプトを呼び出すときにスタックします(常にではありません...しかし、多くの場合、スタックします)。(Rscriptを停止すると、Pythonスクリプトが実行されていることが常に通知されるため、そこでスタックすることはわかっています)。私はchmod 777
そのpythonスクリプトを編集しましたが、手がかりはありません。
これは数日前までは正常に機能していましたが、理由はわかりません。
Rscript文:
Rscript /home/XXX/XXX/scriptServicioBBDDHS.R
R コードで停止する場所:
outputMACs <- system(ignore.stdout = F, ignore.stderr = T,
"python3 /home/XXX/XXX/MACsPrincipal.py 'Y.Y.Y.Y' 'user' 'password'", intern = T)
Python スクリプトは、MikroTik ルーター用の API です。ルーターからの応答を読み取ろうとすると、スタックします。この文では:
r = select.select([s, sys.stdin], [], [], None)
main()
Pythonスクリプトのコードを入れます:
def main():
s = None
for res in socket.getaddrinfo(sys.argv[1], "8728", socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
except (socket.error, msg):
s = None
continue
try:
s.connect(sa)
except (socket.error, msg):
s.close()
s = None
continue
break
if s is None:
print ('could not open socket')
sys.exit(1)
apiros = ApiRos(s);
apiros.login(sys.argv[2], sys.argv[3]);
inputsentence = ['/ip/hotspot/active/print', '=detail=']
apiros.writeSentence(inputsentence)
t_end = time.time() + 2
while time.time() < t_end:
r = select.select([s, sys.stdin], [], [], None)
if s in r[0]:
# something to read in socket, read sentence
x = apiros.readSentence()
ご協力ありがとうございました。このスクリプトは、最初にcrontabを使用して最初に使用したときは常に機能していました。今は失敗するだけです。
セルジオ。