Пакетная обработка с одной задачей за раз

Один из способов сделать это:

#! /bin/sh

VAR1="abc def ghi"
VAR2="1 2 3"

fun()
{
    set $VAR2
    for i in $VAR1; do
        echo command "$i" "$1"
        shift
    done
}

fun

Выход:

command abc 1
command def 2
command ghi 3
6
28.12.2019, 20:39
2 ответа

ts - task spooler. A simple unix batch system должен быть готов к этой задаче. Он запускает диспетчер очереди задач/сервер очередей, и вы можете добавить новую задачу с помощью простой команды, например:

tsp yourcommand

Вы можете указать количество слотов -, т. е. сколько заданий должно выполняться одновременно. По умолчанию установлено значение один, AFAIK. Он также имеет некоторые расширенные функции, такие как запуск команды только в том случае, если определенная предыдущая команда выполнена успешно. Вы также можете просмотреть очередь и детали для каждого задания. Вы можете найти более подробную информацию на справочной странице .

3
27.01.2020, 20:27

Вы можете сделать это, просто используя bash:

1 -создать fifo с помощью mkfifo (вы также можете создать файл)

mkfifo mybuff

2 -завершите fifo и передайте каждую строку вашему исполнителю (это будет что-то вроде сервера задач)

while IFS= read -r line
do
  echo "Running: '$line' with bash"
  bash -c "$line"
  echo "Finished '$line' with exit code: $?"
done < <(tail -f mybuff)

3 -Отправьте свои команды в очередь, например, (это будет клиент, запрашивающий задачи)

echo 'sleep 10' >> mybuff
echo 'echo "hello world"' >> mybuff
echo 'my fancy command to be executed' >> mybuff
...

PS :Вы можете упростить шаг 2, как в примере ниже, но это приведет к завершению прослушивателя задач, когда вы отправите «выход» в свой командный буфер

tail -f mybuff | bash -x
4
27.01.2020, 20:27

Теги

Похожие вопросы