Process

簡單的排隊系統?

  • October 8, 2021

給定一台商用 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 上的隊列,要麼我用錯了。)

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