Если у меня есть 2 php-скрипта в sh-файле, могу ли я быть уверен, что второй скрипт запустится только после завершения первого? - PullRequest
1 голос
/ 08 июля 2011

Если у меня есть 2 php-скрипта в sh-файле и я запускаю sh-файл из командной строки или из cron, могу ли я быть уверен, что второй скрипт запустится только после завершения первого?

В test.sh у меня есть

php test1.php
php test2.php

И я запускаю test.sh.Могу ли я быть уверен, что test2.php не запустится до завершения test1.php?

Ответы [ 4 ]

1 голос
/ 08 июля 2011

Если «test1.php» демонизирует себя, то «test2.php» может выполняться до того, как первый будет завершен. Если вы хотите избежать этого сценария, вы можете использовать что-то вроде следующего:

#!/usr/bin/env bash

test1.php

PIDLIST=$(ps axwww | fgrep -v grep | fgrep "test1.php" | awk '{ print $1 }')

while [ ! -z "$PIDLIST" ]; do
    sleep 1
    PIDLIST=$(ps axwww | fgrep -v grep | fgrep "test1.php" | awk '{ print $1 }')
done

test2.php

Предполагается, что в любой момент времени в системе может быть запущен только один test1.php.

0 голосов
/ 08 июля 2011

установите некоторую переменную в test1.php и отправьте эту переменную в test2.php, проверьте значение этой переменной в test2.php, если оно не установлено, выполните exit()

0 голосов
/ 08 июля 2011

Простите, если я не знаю (начинающий пользователь sh), но нельзя ли использовать && для разделения команд, чтобы 2-я команда выполнялась только после того, как первая возвращает значение 0 (успех)?

(command1) && (command2);

РЕДАКТИРОВАТЬ: Или используя || выполнить command2, если команда 1 возвращает ненулевое значение

0 голосов
/ 08 июля 2011

Вы получили то, что получили - php не завершит работу, если test1.php не будет завершен, затем он запустит test2.php.Тем не менее, это не будет работать для любых оболочек, таких как fastcgi.

Вы можете использовать множество инструментов параллельного управления процессами. См. Мой вопрос на SF - https://serverfault.com/questions/259491/shell-script-run-a-batch-of-n-commands-in-parallel-wait-for-all-to-finish-run

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...