Process
簡單的排隊系統?
給定一台商用 PC,我們想用它在後台全天候執行一些任務。
基本上,我們希望有如下命令:
add-task *insert command here* list-tasks remove-task(s)
添加的任務應該簡單地放在一個隊列中並在後台一個接一個地執行(退出shell後繼續執行)。
是否有任何簡單的腳本/程序可以做到這一點?
有一個標準
batch
命令可以或多或少地完成您所追求的。更準確地說,batch
在系統負載不太高時執行作業,一次一個(因此它不進行任何並行化)。該batch
命令是at
包的一部分。echo 'command1 --foo=bar' | batch echo 'command2 "$(wibble)"' | batch at -q b -l # on many OSes, a slightly shorter synonym is: atq -q b at -q b -r 1234 # Unschedule a pending task (atq gives the task ID)
另一種解決方案是使用
lpd
並創建一個自定義“列印驅動程序”來執行您的作業。當我有類似的要求時,一位朋友幫我解決了這個問題。製作這樣的腳本,並將其放入/tmp/batch.sh
:#!/bin/bash TMPFILE=$(mktemp /tmp/XXXX) exec <"$6" cat - > $TMPFILE chmod a+x $TMPFILE $TMPFILE rm -f $TMPFILE
然後執行:
lpadmin -p batch1 -E -P /tmp/batch.sh
這會啟動一個隊列,您可以使用其他名稱而不是 batch1 創建更多。添加工作:
lp -d batch1 /path/to/jobscript
lpq
使用、lprm
和管理作業lpstat
。如果您希望更靈活地將參數傳遞給您的作業,您可以使 batch.sh 腳本更有趣。(我在沿著這條路線走之前嘗試
batch
過,但要麼它不能作為 OSX 上的隊列,要麼我用錯了。)