2012-04-06 2 views
0

У меня есть простой скрипт bash, который вызывает скрипт php каждые 10 минут, который выполняет некоторое обслуживание. Время от времени этот php-скрипт завершается во время его запуска, и когда это происходит, скрипт bash завершается.Как предотвратить непрерывный цикл от завершения

Я хотел бы сделать так, чтобы скрипт bash продолжал цикл, даже если скрипт php перестает работать. Может кто-то указать мне верное направление? Я искал какое-то время, но я не могу найти ответ, возможно, я не использую правильные условия поиска.

#!/bin/sh 
set -e  
while :  
do  
    /usr/bin/php /path/to/maintenance/script.php 
    sleep 600  
done 
+3

Не могли бы вы подумать о том, чтобы настроить работу с хроном вместо этого? – rjz

+0

+1 для предложения cron – drnewman

+0

cron - правильный путь, но также и ваш цикл while, вы не устанавливаете какое-либо условие? Я имею в виду, что он контур бесконечно в вашем примере кода выше. – Jasonw

ответ

1

The:

set -e 

строка устанавливает командный интерпретатор «выход на ошибки» флаг, который говорит ему, что если программа она работает завершается с ненулевым статусом, оболочка должна также выход:

set -e 
false 
echo if this prints, your shell is not honoring "set -e" 

Есть исключения для программ, статус которых испытываются, конечно, так что:

set -e 
if prog; then 
    echo program succeeded 
else 
    echo program failed 
fi 
echo this will still print 

будет работать гр правильно (одно или или другое эхо произойдет, а затем и последнее).

Назад в Dim время, когда /bin/sh был не-POSIX и был написан в Bournegol, там была ошибка в некоторых версиях sh что сломал || выражения:

set -e 
false || true 
echo if this prints, your shell is OK 

(Логическая ошибка применительно к && выражения внутри, но там было безвредно, так как false && anything сам по себе является ложным, что означает, что все выражение терпит неудачу!) С тех пор я опасался «-e».

3

Комментарий Rjz подходит, вы должны использовать cron. Для этого запустите crontab -e и добавьте следующую строку:

*/10 * * * * /usr/bin/php /path/to/maintenance/script.php 

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

+0

+1 для показа, как использовать cron – drnewman

Смежные вопросы