У меня есть скрипт, работающий на Fedora 22, где я перезапускаю службу сети как часть вызова устранения неполадок service network restart
. Я хочу проверить, не слишком ли долго выполняется эта команда. Если она выполняется слишком долго, я хочу вывести сообщение "Ошибка перезапуска сетевой службы". В противном случае я хочу продолжить выполнение скрипта.
решение1
Вы можете использовать timeout
команду для запуска вашей команды или скрипта в заданном таймауте. Что-то похожее на это:
timeout 10m command
Который ждет завершения команды в течение 10 минут, в противном случае убивает ее и завершает работу со статусом 124. Затем вы можете проверить статус выхода timeout
и вывести соответствующее сообщение на его основе. Подробнее см. здесь:Страница руководства по тайм-ауту.
Если вы не хотите прерывать длинную команду, сделайте что-то вроде этого:
(( sleep $TIMEOUT; echo "command took so long!" ) & exec $COMMAND )
По истечении времени TIMEOUT будет выведено сообщение, но команда продолжит выполняться.
решение2
Если вас не волнует редактирование исходных системных скриптов, внутри скрипта вы можете создать функцию вроде
timeoutf(){
#If hangs 1 minute, dies..
sleep 1m
kill $PPID
}
timeoutf&