首頁>技術>

Unix作業佇列系統建立非常輕量級的作業佇列系統,並且無需進行設定,維護,監督或任何長時間執行的過程。

nq應該可以在任何POSIX.1-2008相容系統上執行。包括Linux,OpenBSD,FreeBSD,Mac OS X 10.3等。

預期的目的是臨時對命令列進行排隊。應用場景比如有,構建Makefile的多個目標,一次下載多個檔案,以多種配置執行基準測試,或者只是作為nohup的替代品。

工作原理:

時間戳nq將強制按順序執行作業。該順序將在啟動時獲得。同步發生在檔案系統級別。計時器解析度為毫秒。不使用輪詢。嚴格執行獨佔執行。

強制執行流程如下:

每個作業都有一個flocked檔案,格式如下 ,TIMESTAMP.PID僅在解鎖所有先前的flock檔案後,每個作業才開始為什麼要使用flock?因為它鎖定檔案控制代碼,該檔案控制代碼在exec與子程序(實際作業)之間共享,並且在檔案關閉時(通常是在作業終止時)它將解鎖。

使用排隊得到新工作的鎖,nq CMDLINE...。將輸出作業ID(取消顯示加上-q),並且從nq立即分離,在後臺執行作業。STDOUT和STDERR被重定向到日誌檔案。

nq盡力(但不能保證)以確保當前正在執行的作業的日誌檔案設定了+ x位。因此,可以用來ls -F快速瞭解佇列狀態。

日誌檔案的“副檔名”實際上是PID,因此可以取消作業。在作業開始之前,它是的PID nq,因此也可以透過殺死它來取消排隊的作業。

由於exec日誌檔案中的第一行,可以透過將其作為外殼命令檔案執行來重新提交作業sh $jobid。

可以等待作業完成使用nq -w,可能會列出要等待的作業ID;預設是所有這些。同樣,可以使用來測試是否有需要等待的作業-t。

預設情況下,作業ID是按目錄的,但是可以設定$NQDIR環境變數,將其放置在其他位置。建議建立nq包裝器設定$NQDIR以為不同目的提供不同的佇列。

所有這些操作在產生的鎖定檔案數量上花費的時間在最壞情況下是數量的平方時間,因此應該定期清理它們。

使用示例
git clone https://github.com/leahneukirchen/nq

make可以構建目標clean,depends,all,生成nq和fq可執行檔案,可以mv 到/usr/local/bin目錄下。

使用make all來構建,make install安裝(/usr/local預設)。也可以只將二進位制檔案複製到PATH。

make check如果安裝Perl,則可以用來執行一個簡單的測試套件。

make cleanmake dependsmake all

簡單的下載佇列,可從多個終端訪問:

% mkdir -p /tmp/downloads //生成臨時下載目錄% alias qget='NQDIR=/tmp/downloads nq wget' //別名,比較好記,qget為一個可排隊的下載命令% alias qwait='NQDIR=/tmp/downloads fq -q'window1% qget http://mymirror/big1.iso //起一個視窗1,執行qget下載任務window2% qget http://mymirror/big2.iso //起視窗2window3% qget http://mymirror/big3.iso //起視窗3% qwait //在原來視窗觀察任務在佇列的順序執行... wait for all downloads to finish ...

作為nohup替換:

% ssh remoteremote% nq ./run-benchmark,14f6f3034f8.17035remote% ^D% ssh remoteremote% fq... see output, fq exits when job finished ...
環境條件

nq 僅在以下情況下才能正常工作:

$NQDIR是可寫的。flock在$NQDIR目錄 可以工作.。gettimeofday表現單調(使用CLOCK_MONOTONIC會產生混亂的檔名)。由於競爭,其他工作順序可能會混亂,並且多個任務可能一次執行。沒有其他的程式把,* 設定到環境變數$NQDIR。nq助手

提供了兩個幫助程式:

fq輸出當前正在執行的作業的日誌,在作業完成時退出。如果沒有作業正在執行,則顯示最後一個作業的輸出。 fq -a顯示所有作業的輸出,每個作業fq -q僅顯示一行。 在Linux上fq使用inotify,而後退回輪詢以進行大小更改。(這fq.sh是一個類似於shell指令碼呼叫的類似工具tail,但功能不夠強大)。

tq包裝nq並fq在新的tmux或螢幕視窗中顯示輸出。

(一個純粹的殼實現nq提供為nq.sh,它需要 flock從UTIL-Linux和只有1秒的計時器解析度。鎖檔案nq和nq.sh不應該混。)

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • NumPy新版本釋出了~1.20.0橫空出世