Проста система черги?


10

З огляду на товарний ПК, ми хотіли б використовувати його для виконання деяких завдань у фоновому режимі цілодобово.

В основному, ми хотіли б мати такі команди, як:

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

Додані завдання слід просто помістити в чергу і виконувати одне за одним у фоновому режимі (продовження роботи після виходу з оболонки).

Чи є якийсь простий скрипт / програма, яка робить це?

Відповіді:


7

Існує стандартна 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)

Неправильно сказати, що batchкоманда "не проводить ніякої паралелізації". Зазвичай існує затримка в 60 секунд між початком однієї роботи і початком наступної; однак, нічого, щоб змусити наступне завдання чекати, коли перше закінчиться, - із atdзадоволенням розпочне роботу із пакетної черги, як тільки значення, встановлене -bпараметром, минує (див. atdсторінку людини).
rsaw

Пакет не суворо серіалізує завдання, тому, якщо у вас є єдиний спільний ресурс, відповідь @sitaram (шпалер завдання) повинна працювати краще.
ergosys

5

Іншим рішенням є використання 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, або я його неправильно використовував.)


Я розумію, що @arnaud вказав "товарний ПК", це означає, що це, ймовірно, не OSX, де я тестував це рішення. Однак це повинно бути портативним, і це набагато гнучкіше, ніж batch.
Joe Fusion

1
Це можливо один з найбільш справжніх хак, які я коли-небудь бачив.
Тіаго Македо

На жаль, це більше не працює. github.com/apple/cups/commit/…
wdkrnls

4

Існує безліч систем черги, але вони часто дуже спеціалізовані.

Ви можете заглянути в atпланувальник. Це схоже cronна деякі способи, але це налаштування більше схоже на чергу для одноразових завдань, ніж для повторних завдань. Він може «планувати» речі за іншими критеріями, ніж час, наприклад завантаження системи або послідовність завдань.

У вашому улюбленому дистрибутиві майже напевно будуть пакети для нього.


2

Я зауважую, що це запитання вже кілька років, тому воно може не допомогти оригінальному афіші, але може допомогти комусь іншому.

По-перше: "спілера завдання" - це відповідь. Він досить потужний, і у Fedora це принаймні є.

Але багато серверів, які я використовую, я не можу встановити довільні пакети без великих клопотів, тому мені потрібно щось, що є ідеально чистим bash (або perl, або таким).

Дещо боровшись з цим, я придумав чисту реалізацію башу, яка, здається, працює добре до цих пір. Ви можете знайти його за посиланням https://github.com/sitaramc/bq .

Це лише один сценарій bash, тож установка тривіальна. Однак, він виконує ваші другі та треті вимоги (але це також має бути банальним).

Сценарій коментується в будь-якому випадку, і ви можете мати можливість переглянути його за кілька хвилин, якщо цього хочете.


пакунок debian є спокулером, виконуваним є "tsp" замість "ts", який зіткнувся з чимось іншим. Мені це подобається ще й тому, що ви можете впорядкувати завдання, які знаходяться в черзі, ви не можете це робити з at / batch.
ergosys
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.