Ограничение времени для сценария bash

У меня есть сценарий bash, и я хотел бы установить для него ограничение по времени. Например, если скрипты работают дольше 50, выйдите с 0. Это должно быть сделано внутри скрипта, я не могу изменить команду, вызванную сценарием.

Какой был бы лучший способ сделать это?

Есть что-то вроде ловушки времени?

Я мог бы поместить весь код внутри цикла, но в этом случае это не вариант.

2 Solutions collect form web for “Ограничение времени для сценария bash”

Кажется, что на это уже ответили в другом месте, но вот что вы можете сделать.

Это команда, которая возвращает количество секунд, в течение которых эта команда была запущена (добавленные значения s во время возвращают только секунды).

ps -p "<process-id>" -o times= 

Вам также может понадобиться

 pgrep <name-of-the-script> 

Или, вообще говоря,

 ps -p "$(<name-of-the-script>)" -o times= 

для получения идентификатора процесса.

Затем вы назначаете результат переменной и проверяете ее так часто, как хотите.

Вам нужна обертка.

Наиболее очевидным является переименование исходного сценария и его место для создания сценария оболочки, который будет вызывать оригинал с таймаутом. Вариант этого заключается в том, чтобы создать ссылку с другим именем для самого скрипта, и способ вызова сценария будет решать, что происходит в нем. Это должно быть ясно через мгновение.

Если ваш скрипт вызывается без параметров, вы можете добавить эту внутреннюю оболочку в свой скрипт. Он снова вызовет себя с timeout и с переключателем в параметре $1 .

 #!/usr/bin/env bash TIMEOUT=10 WRAPPER=FALSE if [ "$1" != FALSE ]; then timeout "$TIMEOUT" "$0" "$WRAPPER" exit fi #the proper script echo Here\'s the original script starting. sleep 11 echo End of the original script. 

Поэтому, возвращаясь к предыдущему решению, вы можете использовать $0 чтобы увидеть, как был вызван сценарий. Это был файл или ссылка на него?

Если вы не хотите или не можете создать новый исполняемый файл / ссылку, а исходный вызов использует параметры, доступны другие ключи. Например, может использоваться временный файл. Это потребует некоторых угловых случаев, требующих очистки этого файла, если что-то пойдет не так. Вы также можете использовать PPID в качестве переключателя. Если родительская команда совпадает с дочерней, то она выполняет собственно скрипт, иначе она выполняет себя с таймаутом.

Interesting Posts

GREP исключает первые 11 значений

Запустить команду при запуске в Kali

Разрешить чтение файла только командой системы в программе C

Как сделать ISO_Level4_Shift и Lock в xkb?

Как измерить скорость чтения / записи раздела или диска?

Символы Unicode в вложениях Mutt

Почему файловые системы на базе inode НЕ нуждаются в перезагрузке после обновления версий библиотеки?

Как выполнить программу, когда вызывается текстовый файл и по-прежнему возвращает правильный текст

Невозможно скомпилировать любое программное обеспечение

Потребление памяти AIX

Другая учетная запись с тем же uid, что и root, запрашивается, чтобы установить новый пароль для root, а не сам

Команда Bash для источника файла в другом каталоге?

Сервер Apache на новом экземпляре AWS EC2 недоступен

Является ли Webmin ориентированным на конкретный дистрибутив Linux?

Как я могу остановить vim от редактирования каталогов?

Linux и Unix - лучшая ОС в мире.