如果我在sh文件中有2个php脚本,我可以确定第二个脚本只在第一个脚本完成后才开始运行吗?

时间:2011-07-07 20:18:57

标签: php linux shell cron

如果我在sh文件中有2个php脚本并且我从命令行或cron运行sh文件,我可以确定第二个脚本只在第一个脚本完成后才开始运行吗?

在test.sh中我有

php test1.php
php test2.php

我运行test.sh.我可以确定test1.php在test1.php完成之前不会启动吗?

4 个答案:

答案 0 :(得分:1)

如果“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。

答案 1 :(得分:0)

你得到的东西 - 除非test1.php完成,否则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

答案 2 :(得分:0)

test1.php中设置一些变量,并将该变量发送到test2.php,检查test2.php中的变量值,如果未设置,则执行exit()

答案 3 :(得分:0)

请原谅我,如果我无知(初学者用户)但你不能使用&&分离命令,以便第二个命令仅在第一个命令返回0值(成功)后执行?

(command1) && (command2);

编辑:或使用||如果命令1返回非零

,则运行command2