Ограничить время выполнения скрипта
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2009-02-16 18:48:58
Ограничить время выполнения скрипта
Приветствую! Обращаюсь за помощью к знающим. Есть php-скрипт, который вызывается из консоли, который возвращает опред. результат. Пример:
$ ./script.php
$ status OK
Суть в том, что данный скрипт не идеален, но изменить его структуру по некоторым причинам сложно. Проблема в том, что данный скрипт периодически зависает и ничего не возвращает. Пример:
$ ./script.php
*думает около 20 сек*
$
Вопрос - каким образом, при помоши bash ограничить время работы данного скрипта + присвоить простую проверку на предмет возврата. Например если скрипт ничего не вернул, повторить запуск. Благодарен за ответы.
$ ./script.php
$ status OK
Суть в том, что данный скрипт не идеален, но изменить его структуру по некоторым причинам сложно. Проблема в том, что данный скрипт периодически зависает и ничего не возвращает. Пример:
$ ./script.php
*думает около 20 сек*
$
Вопрос - каким образом, при помоши bash ограничить время работы данного скрипта + присвоить простую проверку на предмет возврата. Например если скрипт ничего не вернул, повторить запуск. Благодарен за ответы.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2008-09-19 7:54:52
- Контактная информация:
Re: Ограничить время выполнения скрипта
Вам только bash подходит ?
Например можно ведь сделать запуск тестового скрипта из другого (проверяющего )скрипта. На перловке я бы сделала запуск скрипта , затем паузу на 20 секунд Потом проверка (можно сделать kill если надо убить не завершенный процесс) и запуск снова ( в цикле).
Например можно ведь сделать запуск тестового скрипта из другого (проверяющего )скрипта. На перловке я бы сделала запуск скрипта , затем паузу на 20 секунд
Код: Выделить всё
select(undef, undef, undef, 20);
-
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2009-02-16 18:48:58
Re: Ограничить время выполнения скрипта
Спасибо за ответ. К сожалению на машине, где происходит вызов скрипта отсутствует perl и поставить его нет возможности. Посему, моя задача просит решения с помощью bash.
-
- мл. сержант
- Сообщения: 85
- Зарегистрирован: 2009-02-16 18:48:58
Re: Ограничить время выполнения скрипта
Неужели bash-знатоки перевелись с данного ресурса ?
- terminus
- майор
- Сообщения: 2305
- Зарегистрирован: 2007-10-29 11:27:35
- Откуда: Рига
Re: Ограничить время выполнения скрипта
Там вроде можно было запускть что-либо в субшелле и потом продолжать выполнение родительского скрипта. Надо будет только узнать pid прошесса в субшелле...
Вот так вроде субшел вызывается - выполняем команду true в нем:
Ну а дальше мониторить по пиду...
Вот так вроде субшел вызывается - выполняем команду true в нем:
Код: Выделить всё
(true)
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.
-
- проходил мимо
Re: Ограничить время выполнения скрипта
Вот тоько не надо на "слабо" брать , лучше пивом стимулировать, - ПИВОМ !gilas писал(а):Неужели bash-знатоки перевелись с данного ресурса ?
Код: Выделить всё
#! /usr/local/bin/bash
###########################################
# Default values
#------------------------------------------
declare -i timeout=20 # default timeout in seconds.
Kill='/bin/kill'
split_line='-------------------------------------------------------------------------------'
success_msg='status OK' # that what external program should return on success
#
###########################################
ftmp="$(mktemp /tmp/$(basename $0).XXXXXXXX)"
trap "rm -f ${ftmp}" 0 1 2 5 15
ext_prg=$1
( ${ext_prg} )>${ftmp} 2>&1 & # run some program in subshell
cPID=$! # get PID of subshell
sleep 5 # wait at least 5 seconds to get time for process to start
((timeout-=5))
status=0
if [[ ${timeout} -gt 0 ]]; then
while [[ $( ps | grep -o -G "^${cPID}"; ) -eq ${cPID} && ${status} -eq 0 ]]; do
status=$((timeout-- ? 0 : 1)); sleep 1
done
fi
if [[ ${status} -eq 1 ]]; then
eval '${Kill} -9 ${cPID}' &>/dev/null; # If timeout occured - kill child process
echo "${split_line}"
echo `basename $0`": Err: Timeout occured."
echo "Process(${cPID}): ${ext_prg}"
echo "was killed because of timeout."
echo "${split_line}"
exit 1
else
echo "${split_line}"
echo -en "Process(${cPID}): ${ext_prg}\nterminate by itself successfully.\n"
rc=$(cat ${ftmp} | awk "/${success_msg}/"'{print $2}')
if [[ -z "${rc}" ]]; then
echo "${ext_prg}: ERR: no success code returned!!!"
exit 1
else
echo "${ext_prg}: return success code!!!"
fi
echo "${split_line}"
fi
exit 0