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

Я понял!

Мы можем передать поток через временный файл! В Linux мы можем передать его через файл в / dev / shm , чтобы данные оставались в памяти. Мы также можем заключить его в функцию:

get_output() {
  $1 > /dev/shm/bash_pipe
  eval $2=`cat /dev/shm/bash_pipe`
  rm /dev/shm/bash_pipe
}

Затем мы можем использовать его так: get_output fct var , и вы можете использовать вывод fct с $ var .

2
18.05.2017, 16:25
2 ответа

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

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

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

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

pgrep <name-of-the-script>

Или вообще

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

, чтобы получить идентификатор процесса.

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

0
27.01.2020, 22:18

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

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

Если ваш скрипт вызывается без параметров, вы можете добавить эту внутреннюю оболочку в свой скрипт. Он снова вызовет себя с 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 в качестве переключателя. Если родительская команда такая же, как и дочерняя, то она выполняет собственно скрипт, в противном случае она выполняется сама с тайм-аутом.

1
27.01.2020, 22:18

Теги

Похожие вопросы