Ограничить время выполнения shell_script в PHP

Я вызываю сценарий оболочки в Linux, используя сценарий PHP, я делаю следующее:

shell_exec('./shell_script.sh');

после этого скрипт PHP продолжается.. Все это работает как положено.

Однако иногда shell_script не завершает выполнение по какой-либо причине, поэтому возникает вопрос:

Как я могу прекратить shell_script.sh после выполнения в течение x раз? Должно ли это быть как-то решено в самом PHP (не думаю, что это возможно в данном случае) или это должно быть сделано в самом.sh?

Так что сразу после:

#!/bin/bash

в начале.sh есть что-то, что я могу положить для его завершения, если время выполнения превышает, скажем, 20 секунд?

2 ответа

Решение

Я не знаю, можете ли вы сделать это в php, и в bash могут существовать лучшие решения, но это то, что вы могли бы сделать:

Это строка, которую вы можете поставить сразу после #!/bin/bash убить текущий скрипт через 20 секунд:

(sleep 20 && kill $$) &

bash заменяет $$ на pid текущего скрипта.

Вы можете использовать что-то вроде этого:

# start timer
( sleep $TIMEOUT ; kill $$ ) 2>/dev/null &
TIMER_PID=$!

# "payload"
echo hello

# cancel timer
kill $TIMER_PID

YMMV, хотя, в моих тестах часть, которая должна отменить таймер, иногда не убивает sleep и программа ждет, пока не истечет время ожидания.

Другие вопросы по тегам