У меня есть периодический скрипт, работающий в фоновом режиме на моем сервере 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 — это API для роутера MikroTik. Он зависает при попытке прочитать ответ от маршрутизатора. В этом предложении:
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. Сейчас просто не получается.
Серхио.