Ограничить время выполнения 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
и программа ждет, пока не истечет время ожидания.