如果我在sh文件中有2個php腳本,並且我從命令行或cron運行sh文件,我可以確定第二個腳本只在第一個腳本完成後纔開始運行嗎?如果我在sh文件中有2個php腳本,我可以確定第二個腳本只會在第一個腳本完成後纔開始運行?
在test.sh我
php test1.php
php test2.php
我跑test.sh.我能確定test2.php在test1.php完成之前不會啓動嗎?
如果我在sh文件中有2個php腳本,並且我從命令行或cron運行sh文件,我可以確定第二個腳本只在第一個腳本完成後纔開始運行嗎?如果我在sh文件中有2個php腳本,我可以確定第二個腳本只會在第一個腳本完成後纔開始運行?
在test.sh我
php test1.php
php test2.php
我跑test.sh.我能確定test2.php在test1.php完成之前不會啓動嗎?
你有什麼 - PHP不會退出,除非test1.php完成,那麼它將啓動test2.php。但是,這對於像fastcgi這樣的任何包裝都不起作用。
您可以使用大量的並行進程管理工具..看到我questiong在SF - https://serverfault.com/questions/259491/shell-script-run-a-batch-of-n-commands-in-parallel-wait-for-all-to-finish-run
設置一些變量test1.php
和可變發送到test2.php
檢查變量值在test2.php
如果未設置然後執行exit()
原諒我,如果我懵了(初級SH用戶),但你能不能用& &,這樣第一個返回值爲0(成功)後,纔會執行第二個命令分隔命令?
(command1) && (command2);
編輯:或使用||如果命令1返回非零,則運行命令2
如果「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可以在系統上運行。
'test1.php'並不需要做完整的守護進程;只需分叉並退出就足夠了。 (守護進程會經歷一些額外的工作,但不會影響結果;解釋大部分是正確的,只是過於具體。)但是+1指出了分叉的可能性。 – cHao