Basit kuyruk sistemi?


10

Bir emtia bilgisayarı verildiğinde, bunu arka planda bazı görevleri yürütmek için kullanmak istiyoruz.

Temel olarak, aşağıdaki gibi komutlara sahip olmak istiyoruz:

add-task *insert command here*
list-tasks
remove-task(s)

Eklenen görevler bir kuyruğa konulmalı ve arka planda birbiri ardına yürütülmelidir (kabuğun oturumunu kapattıktan sonra çalışmaya devam et).

Bunu yapan basit bir komut dosyası / program var mı?

Yanıtlar:


7

batchNeyin peşinde olduğunuzu az çok yapan standart bir komut var. Daha kesin olarak, batchişleri sistem yükü her seferinde bir tane çok yüksek olmadığında yürütür (böylece herhangi bir paralelleştirme yapmaz). batchKomut parçası olan atpaketin.

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)

batch"Paralelleme yapma" komutunun yanlış olduğunu söylemek yanlış . Bir işe başlamak ile bir sonrakini başlatmak arasında genellikle varsayılan 60 saniyelik bir gecikme vardır; ancak, bir sonraki işi ilk bitirmek için bekletecek bir şey yoktur - seçenek atdtarafından belirlenen değer sona erdiğinde işleri toplu iş kuyruğundan başlatacaktır -b( atdman sayfasına bakınız ).
testere

Toplu iş görevleri tam olarak serileştirmez, bu nedenle tek bir paylaşılan kaynağınız varsa, @sitaram'ın yanıtı (görev biriktiricisi) daha iyi çalışmalıdır.
ergosys

5

Başka bir çözüm, lpdişlerinizi yürüten özel bir "yazdırma sürücüsü" kullanmak ve kullanmaktır . Benzer bir isteğim olduğunda bir arkadaşım bunu yapmama yardımcı oldu. Bunun gibi bir senaryo oluşturun ve yerleştirin /tmp/batch.sh:

#!/bin/bash

TMPFILE=$(mktemp /tmp/XXXX)
exec <"$6"
cat - > $TMPFILE
chmod a+x $TMPFILE
$TMPFILE
rm -f $TMPFILE

O zaman koş:

lpadmin -p batch1 -E -P /tmp/batch.sh

Bu bir kuyruk başlatır ve batch1 yerine diğer adları kullanarak daha fazlasını oluşturabilirsiniz. Şununla bir iş ekleyin:

lp -d batch1 /path/to/jobscript

İle işlerini yönetme lpq, lprmve lpstat. İşlerinize argümanlar iletme konusunda daha fazla esneklik istiyorsanız, batch.sh script meraklısı yapabilirsiniz.

( batchBu rotadan aşağı gitmeden önce denedim , ancak ya OSX'te kuyruk olarak çalışmıyor ya da yanlış kullanıyordum.)


@Arnaud'un "emtia PC" i belirlediğinin farkındayım, bu muhtemelen bu çözümü test ettiğim OSX değil. Ancak, bu taşınabilir olmalı ve çok daha esnektir batch.
Joe Fusion

1
Bu şimdiye kadar gördüğüm en gerçek hacklerden biri.
Thiago Macedo

Ne yazık ki, bu artık işe yaramıyor gibi görünüyor. github.com/apple/cups/commit/…
wdkrnls

4

Çok sayıda kuyruk sistemi vardır, ancak çoğu zaman çok uzmanlaşmıştır.

atZamanlayıcıya bakabilirsiniz . Sanki cronbazı açılardan ama daha tekrarlayan işlerde birden zaman işler için bir kuyrukta gibi kurulduğundan. Sistem yükü veya iş sırası gibi, zaman dışındaki kriterlere göre işleri "zamanlayabilir".

En sevdiğiniz dağıtımın neredeyse kesinlikle paketleri olacak.


2

Bu sorunun birkaç yaşında olduğunu fark ettim, bu yüzden orijinal postere yardımcı olmayabilir, ancak başka birine yardımcı olabilir.

Birincisi: "görev biriktiricisi" yanıttır. Oldukça güçlü ve Fedora en azından sahip.

Ancak kullandığım sunucuların birçoğu, çok fazla uğraşmadan rastgele paketler yükleyemiyorum, bu yüzden ideal olarak saf bash (veya perl veya benzeri) bir şeye ihtiyacım var.

Bir süre bununla mücadele ettikten sonra, şimdiye kadar iyi görünen saf bir bash uygulaması buldum. Https://github.com/sitaramc/bq adresinde bulabilirsiniz .

Bu sadece bir bash betiği yani kurulum önemsiz. Ancak, ikinci ve üçüncü gereksinimlerinizi gösterir (ancak bunları uygulamak önemsiz olmalıdır).

Script liberal olarak yorumlanır ve isterseniz birkaç dakika içinde incelemeniz gerekir.


debian paketi görev biriktirici, çalıştırılabilir başka bir şey ile çarpışan "ts" yerine "tsp" dir. Bunu da seviyorum çünkü sıradaki görevleri yeniden sıralayabilirsiniz, bunu at / batch ile yapamazsınız.
ergosys
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.