Process

如何使用作業名稱(CentOS)檢查作業是否在集群上執行

  • August 2, 2016

我正在執行一個 bash 腳本來送出多個作業。僅當此類作業尚未執行時才會送出作業。我想在我的 bash 腳本中使用 if 語句來簡單地檢查“job123”是否已經在執行或在隊列中。

我嘗試了 qstat 和 qstatus 的不同選項,但我似乎無法按作業名稱進行檢查。如何檢索這些資訊?這些輸出也只是字元串,我也沒有任何運氣使用 grep 但我認為必須有一個特定的命令。

我已經能夠解決

qstat -r | grep -cw “作業名”

它給出了一個 0 或 1,然後我可以在 if 語句中使用它們。在我看來,這更像是一種黑客行為。-r 很重要,因為它顯示作業的全名。

Sun/Oracle Grid Engine 的qstat實用程序只允許您按使用者和作業 ID 過濾作業。如果您需要按作業名稱過濾,則必須這樣grep做:

qstat -u $USER | grep -w jobname

在 - 語句中使用if

if qstat -u $USER | grep -q -w "$jobname"; then
 # job is in the queue
else
 # job is not in the queue
fi

在網上簡單搜尋後,我還發現某些版本的qstat 似乎可以使用-j開關按作業名稱進行過濾:

qstat -u $USER -j "$jobname"

我無法驗證這是否有效。該實用程序的其他版本顯然無法做到這一點(甚至不支持-u)。

引用自:https://unix.stackexchange.com/questions/299642