如果我在sh文件中有2个php脚本并且我从命令行或cron运行sh文件,我可以确定第二个脚本只在第一个脚本完成后才开始运行吗?
在test.sh中我有
php test1.php
php test2.php
我运行test.sh.我可以确定test1.php在test1.php完成之前不会启动吗?
答案 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