2017-12-18 169 views
1

我正在編寫一個bash腳本,該腳本本質上是一個需要大約10個小時才能完成的python腳本,後面跟着一個R腳本,用於檢查python腳本的輸出以獲取所需的任何內容關心。以下是我有:正確使用帶有未知進程的Bash等待命令編號

ProdRun="python scripts/run_prod.py" 

echo "Commencing Production Run" 

$ProdRun #Runs python script 

wait 

DupCompare="R CMD BATCH --no-save ../dupCompareTD.R" #Runs R script 
$DupCompare 

現在我的問題是,往往是Python腳本可以根據其輸入,有很多不同的PID的產生我們的Linux服務器上的不同過程的整個堆,我們有工人堆使用相同的服務器啓動腳本。據我所知,「等待」命令必須等待所有進程完成或完成特定的PID,但是當我無法分辨將分配的PID或進程將運行多少個PID時,我該如何確切用它?

編輯:謝謝你所有的幫助,這是什麼導致我的困境,任何人搜索這個谷歌。我將ProdRun python腳本分解爲它自己調用的單獨腳本,但仍然存在問題,我認爲其中一個腳本也調用了另一個較小的腳本,其末尾有一個「&」忽略在python腳本本身內部等待的任何命令。簡單地刪除它並插入一行「os.system()」,允許所有代碼順序運行。

+0

您只能等待子進程。你不能等待孫子的過程。 –

+0

不要使用變量來存儲命令;使用功能。 – chepner

回答

1

這聽起來像是你正試圖實現一個作業調度器,可能在不同的任務之間有一些複雜的依賴關係。我建議使用工作日程安排程序。它允許你指定,同時也像監控功能中獲益跑這些工作,處理異常情況,出錯,...

的例子是:開源rundeck https://github.com/rundeck/rundeck或商用一體http://www.bmcsoftware.uk/it-solutions/control-m.html

+0

感謝您的回覆,對不起,如果我不清楚,我不關心其他進程,只要這個特定的R腳本在python腳本完成後啓動。它是如何工作的,我輸入一個數字作業到python腳本中,並且它爲每個我提交的作業都有一個python進程和它自己的PID。這會落入需要工作調度程序的領域嗎? –

0

讓你的Python程序等待它產生的孩子。這是解決這種情況的正確方法。然後,在完成之後,您不必等待Python(原文如此)。

(另外,請勿將您的命令放入變量中。)