Сброс продолжительности тайм-аута при выводе команды

#linux #bash #timeout

#линукс #удар #перерыв

Вопрос:

У меня проблема, когда команда выполняется очень нерегулярно, она не запускается.

В настоящее время я использую тайм-аут, но проблема в том, что, когда команда работает, ее завершение занимает много времени (несколько минут).

В идеале я хочу установить тайм-аут на бесконечность, если команда подает какие-то признаки жизни, и сохранить его на 15 секунд в противном случае.

Есть какие-нибудь предложения?

Ответ №1:

В конце концов я решил эту проблему, завернув ее в скрипт на python. Использование является

 python script.py [your command]  

Сценарий будет контролировать, требуется ли повторный запуск команд

 import sys import subprocess import signal import time  def handler(signum, frame):  global atm  if (atmlt;3): # attempt to re-run 2 times  print('re-running')  atm = atm   1  p.kill()  signal.alarm(0)  time.sleep(15) # not sure that is needed, but just in case  run()  else:  raise OSError("Number of re-run attempts exceeded")  def run(): # run the command which is passed as a parameter to this script  global p  p = subprocess.Popen(args, stdout=subprocess.PIPE)   signal.signal(signal.SIGALRM, handler) # will not work on Windows  signal.alarm(5) # give 5 seconds to produce some output, rerun otherwise    for line in iter(p.stdout.readline, b''):  signal.alarm(0) # if output produced remove the alarm  topr = (line).decode('UTF-8');  print(topr, end='')  args = sys.argv[1::] # command passed here  atm = 0 run()