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